QT 4: программирование GUI на С++
Шрифт:
Ниже приводится файл .pro для внутрипроцессного сервера ActiveX:
Файлы qaxserver.rc и qaxserver.def, на
Файл makefile или сгенерированный утилитой qmake файл проекта Visual С++ содержат правила для регистрации сервера в реестре Windows. Для регистрации сервера на машине пользователя мы можем использовать утилиту regsvr32, которая имеется во всех системах Windows.
Мы можем затем включить компонент Bouncer в страницу HTML, используя тег <object>:
Мы можем создать кнопку для вызова слотов:
Мы можем манипулировать виджетом при помощи языков JavaScript или VBScript точно так же, как и любым другим элементом управления ActiveX (см. расположенный на компакт-диске файл demo.html, содержащий очень простую страницу, в которой используется сервер ActiveX.
Наш последний пример — приложение Address Book (адресная книга), применяющее сценарий. Это приложение может рассматриваться в качестве стандартного приложения Qt для Windows или внепроцессного сервера ActiveX. В последнем случае мы можем создавать сценарий работы приложения, используя, например, Visual Basic.
Виджет AddressBook является
В предыдущем примере мы определяли идентификаторы класса и интерфейса при экспорте класса QAxBouncer, используя макрос QAXFACTORY_DEFAULT. В этом примере мы хотим экспортировать несколько классов, поэтому нельзя использовать макрос QAXFACTORY_DEFAULT. Мы можем поступать двумя способами:
• можно создать подкласс QAxFactory, переопределить его виртуальные функции для представления информации об экспортируемых нами типах и использовать макрос QAXFACTORY_EXPORT для регистрации фабрики классов;
• можно использовать макросы QAXFACTORY_BEGIN, QAXFACTORY_END, QAXCLASS и QAXTYPE для объявления и регистрации фабрики классов. В этом случае потребуется использовать макрос Q_CLASSINFO для определения идентификаторов класса и интерфейса.
Вернемся к определению класса AddressBook. Третий вызов макроса Q_CLASSINFO может показаться немного странным. По умолчанию элементы управления ActiveX предоставляют в распоряжение клиентов не только свои собственные свойства, сигналы и слоты, но и свои суперклассы вплоть до QWidget. Атрибут ToSuperClass позволяет определить суперкласс самого высокого уровня (в дереве наследования), который мы собираемся предоставить клиенту. Здесь мы указываем имя класса компонента («AddressBook») в качестве имени экспортируемого класса самого высокого уровня — это значит, что не будут экспортироваться свойства, сигналы и слоты, определенные в суперклассах AddressBook.