Читаем QT 4: программирование GUI на С++ полностью

Вернемся к определению класса AddressBook. Третий вызов макроса Q_CLASSINFO() может показаться немного странным. По умолчанию элементы управления ActiveX предоставляют в распоряжение клиентов не только свои собственные свойства, сигналы и слоты, но и свои суперклассы вплоть до QWidget. Атрибут ToSuperClass позволяет определить суперкласс самого высокого уровня (в дереве наследования), который мы собираемся предоставить клиенту. Здесь мы указываем имя класса компонента («AddressBook») в качестве имени экспортируемого класса самого высокого уровня — это значит, что не будут экспортироваться свойства, сигналы и слоты, определенные в суперклассах AddressBook.

01 class ABItem : public QObject, public QListViewItem

02 {

03 Q_OBJECT

04 Q_PROPERTY(QString contact READ contact WRITE setContact)

05 Q_PROPERTY(QString address READ address WRITE setAddress)

06 Q_PROPERTY(QString phoneNumber

07 READ phoneNumber WRITE setPhoneNumber)

08 Q_CLASSINFO("ClassID",

09 "{bc82730e-5f39-4e5c-96be-461c2cd0d282}")

10 Q_CLASSINFO("InterfaceID",

11 "{c8bc1656-870e-48a9-9937-fbe1ceff8b2e}")

12 Q_CLASSINFO("ToSuperClass", "ABItem")

13 public:

14 ABItem(QTreeWidget *treeWidget);

15 void setContact(const QString &contact);

16 QString contact() const { return text(0); }

17 void setAddress(const QString &address);

18 QString address() const { return text(1); }

19 void setPhoneNumber(const QString &number);

20 QString phoneNumber() const { return text(2); }

21 public slots:

22 void remove();

23 };

Класс ABItem представляет один элемент в адресной книге. Он наследует QTreeWidgetItem и поэтому может отображаться в QTreeWidget, и он также наследует QObject и поэтому может экспортироваться как объект СОМ.

01 int main(int argc, char *argv[])

02 {

03 QApplication app(argc, argv);

04 if (!QAxFactory::isServer()) {

05 AddressBook addressBook;

06 addressBook.show();

07 return app.exec();

08 }

09 return app.exec();

10 }

В функции main() мы проверяем, в каком качестве работает приложение: как автономное приложение или как сервер. Опция командной строки —activex распознается объектом QApplication и обеспечивает работу приложения в качестве сервера. Если приложение не является сервером, мы создаем главный виджет и выводим его на экран, как мы обычно делаем для любого автономного приложения Qt.

Кроме опции —activex серверы ActiveX «понимают» следующие опции командной строки:

—regserver — регистрация сервера в системном реестре;

—unregserver — отмена регистрации сервера в системном реестре;

—dumpidl файл — записывает описание сервера на языке IDL (Interface Description Language — язык описания интерфейсов) в указанный файл.

Когда приложение выполняет функции сервера, нам необходимо экспортировать классы AddressBook и ABItem как компоненты СОМ:

QAXFACTORY_BEGIN("{2b2b6f3e-86cf-4c49-9df5-80483b47f17b}",

"{8e827b25-148b-4307-ba7d-23f275244818}")

QAXCLASS(AddressBook)

QAXTYPE(ABItem)

QAXFACTORY_END()

Приведенные выше макросы экспортируют фабрику классов для создания объектов СОМ. Поскольку мы собираемся экспортировать два типа объектов СОМ, мы не можем просто использовать макрос QAXFACTORY_DEFAULT(), как мы делали в предыдущем примере.

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных