Наш последний пример — приложение Address Book (адресная книга), применяющее сценарий. Это приложение может рассматриваться в качестве стандартного приложения Qt для Windows или внепроцессного сервера ActiveX. В последнем случае мы можем создавать сценарий работы приложения, используя, например, Visual Basic.
01 class AddressBook : public QMainWindow
02 {
03 Q_OBJECT
04 Q_PROPERTY(int count READ count)
05 Q_CLASSINFO("ClassID",
06 "{588141ef-110d-4beb-95ab-ee6a478b576d}")
07 Q_CLASSINFO("InterfaceID",
08 "{718780ec-b30c-4d88-83b3-79b3d9e78502}")
09 Q_CLASSINFO("ToSuperClass", "AddressBook")
10 public:
11 AddressBook(QWidget *parent = 0);
12 ~AddressBook;
13 int count const;
14 public slots:
15 ABItem *createEntry(const QString &contact);
16 ABItem *findEntry(const QString &contact) const;
17 ABItem *entryAt(int index) const;
18 private slots:
19 void addEntry;
20 void editEntry;
21 void deleteEntry;
22 private:
23 void createActions;
24 void createMenus;
25 QTreeWidget *treeWidget;
26 QMenu *fileMenu;
27 QMenu *editMenu;
28 QAction *exitAction;
29 QAction *addEntryAction;
30 QAction *editEntryAction;
31 QAction *deleteEntryAction;
32 };
Виджет
В предыдущем примере мы определяли идентификаторы класса и интерфейса при экспорте класса
• можно создать подкласс
• можно использовать макросы
Вернемся к определению класса
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}")