ΠΠ΅ΡΠ½Π΅ΠΌΡΡ ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ° 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(), ΠΊΠ°ΠΊ ΠΌΡ Π΄Π΅Π»Π°Π»ΠΈ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅.
ΠΠ΅ΡΠ²ΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΠΌΠ°ΠΊΡΠΎΡΠ° QAXFACTORY_BEGIN() ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠΈΠΏΠΎΠ²; Π²ΡΠΎΡΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ΅ΠΆΠ΄Ρ ΠΌΠ°ΠΊΡΠΎΡΠ°ΠΌΠΈ QAXFACTORY_BEGIN() ΠΈ QAXFACTORY_END() ΠΌΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ Π²ΡΠ΅ ΠΊΠ»Π°ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½Ρ, ΠΈ Π²ΡΠ΅ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ , Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π‘ΠΠ.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΠ°ΠΉΠ» .pro Π΄Π»Ρ Π²Π½Π΅ΠΏΡΠΎΡΠ΅ΡΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ° ActiveX:
TEMPLATE = app
CONFIG += qaxserver
HEADERS = abitem.h \
addressbook.h \
editdialog.h
SOURCES = abitem.cpp \
addressbook.cpp \
editdialog.cpp \
main.cpp
FORMS = editdialog.ui
RC_FILE = qaxserver.rc
Π€Π°ΠΉΠ» qaxserver.rc, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠΌΠ΅Π΅ΡΡΡ ΡΡΡΠ»ΠΊΠ° Π² ΡΠ°ΠΉΠ»Π΅ .pro, ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ ΠΈΠ· ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° Qt src\activeqt\control.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² vb ΠΏΡΠΎΠ΅ΠΊΡ Visual Basic, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ΅ΡΠ²Π΅Ρ Address Book.
ΠΡΠΈΠΌ ΠΌΡ Π·Π°Π²Π΅ΡΡΠ°Π΅ΠΌ Π½Π°Ρ ΠΎΠ±Π·ΠΎΡ ΡΠ°Π±ΠΎΡΠ΅ΠΉ ΡΡΠ΅Π΄Ρ ActiveQt. ΠΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ² Qt Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ, ΠΈ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΏΠΎΡΠΎΠ±Π°Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ QAxContainer ΠΈ QAxServer ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΡΠ½ΡΡ Π²ΠΎΠΏΡΠΎΡΠΎΠ² Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ.
Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅Π°Π½ΡΠ°ΠΌΠΈ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ X11
ΠΠΎΠ³Π΄Π° ΠΌΡ Π²ΡΡ ΠΎΠ΄ΠΈΠΌ ΠΈΠ· ΡΠΈΡΡΠ΅ΠΌΡ X11, Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΊΠΎΠ½Π½ΡΠ΅ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΡ ΡΠΏΡΠ°ΡΠΈΠ²Π°ΡΡ Π½Π°Ρ ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ΅Π°Π½ΡΠ°. ΠΡΠ»ΠΈ ΠΌΡ ΠΎΡΠ²Π΅ΡΠ°Π΅ΠΌ ΡΡΠ²Π΅ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎ, ΡΠΎ ΠΏΡΠΈ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ Π²Ρ ΠΎΠ΄Π΅ Π² ΡΠΈΡΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π±ΡΠ΄Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π° Ρ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠΊΡΠ°Π½Π° ΠΈ, Π² ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Ρ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ»ΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΡ ΠΎΠ΄Π° ΠΈΠ· ΡΠΈΡΡΠ΅ΠΌΡ.
ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΡΠΈΡΡΠ΅ΠΌΡ X11, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅Π°Π½ΡΠ°, Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠΎΠΌ ΡΠ΅Π°Π½ΡΠΎΠ² (session manager). ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Qt/X11 Β«ΠΎΡΠΎΠ·Π½Π°Π²Π°Π»ΠΎΒ» ΠΏΡΠΈΡΡΡΡΡΠ²ΠΈΠ΅ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ° ΡΠ΅Π°Π½ΡΠΎΠ², ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΡ QApplication::saveState() ΠΈ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΡΠ°ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
Π ΠΈΡ. 20.7. ΠΡΡ ΠΎΠ΄ ΠΈΠ· ΡΠΈΡΡΠ΅ΠΌΡ KDE.
Windows 2000 ΠΈ XP, Π° ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ Unix ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ Π½ΠΎΡΠΈΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Β«ΡΠΏΡΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ²Β» (hibernation). ΠΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ, ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΡΠΎΡΡΠΎ Π²ΡΠ³ΡΡΠΆΠ°Π΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΏΠ°ΠΌΡΡΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ° Π½Π° Π΄ΠΈΡΠΊ ΠΈ Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ Π΅Π΅ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ Β«ΠΏΡΠΎΡΡΠΏΠ°Π΅ΡΡΡΒ». ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π½Π°Π΄ΠΎ Π΄Π΅Π»Π°ΡΡ, ΠΈ ΠΎΠ½ΠΈ Π΄Π°ΠΆΠ΅ ΠΌΠΎΠ³ΡΡ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π·Π½Π°ΡΡ ΠΎΠ± ΡΡΠΎΠΌ.
ΠΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈΠ½ΠΈΡΠΈΠΈΡΡΠ΅Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΡ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΠΈΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΠ΅ΡΠ΅Π΄ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ QApplication::commitData(). ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΠΌ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΈ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π²ΡΡΡΠΏΠ°ΡΡ Π² Π΄ΠΈΠ°Π»ΠΎΠ³ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ. ΠΡΠ° ΡΠ°ΡΡΡ ΡΡ Π΅ΠΌΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅Π°Π½ΡΠΎΠΌ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ X11, ΡΠ°ΠΊ ΠΈ Π² Windows.
ΠΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅Π°Π½ΡΠΎΠΌ ΡΠ΅ΡΠ΅Π· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Tic-Tac-Toe (ΠΊΡΠ΅ΡΡΠΈΠΊΠΈ-Π½ΠΎΠ»ΠΈΠΊΠΈ), ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ° ΡΠ΅Π°Π½ΡΠΎΠ². ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡ main():
01 int main(int argc, char *argv[])
02 {
03 Application app(argc, argv);
04 TicTacToe toe;
05 toe.setObjectName("toe");
06 app.setTicTacToe(&toe);
07 toe.show();
08 return app.exec();
09 }
ΠΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ Application. ΠΠ»Π°ΡΡ Application Π½Π°ΡΠ»Π΅Π΄ΡΠ΅Ρ QApplication ΠΈ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π΄Π²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ commitData() ΠΈ saveState() Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅Π°Π½ΡΠΎΠΌ.
ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π²ΠΈΠ΄ΠΆΠ΅Ρ TicTacToe, Π΄Π°Π΅ΠΌ Π·Π½Π°ΡΡ ΠΎΠ± ΡΡΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΡ Application ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌ Π΅Π³ΠΎ. ΠΡ Π΄Π°Π»ΠΈ Π²ΠΈΠ΄ΠΆΠ΅ΡΡ TicTacToe ΠΈΠΌΡ Β«toeΒ». ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π΄Π°Π²Π°ΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΈΠΌΠ΅Π½Π° Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°ΠΌ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ, Π΅ΡΠ»ΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ, ΡΡΠΎΠ±Ρ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΡΠ΅Π°Π½ΡΠΎΠ² ΠΌΠΎΠ³ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΎΠΊΠΎΠ½.
Π ΠΈΡ. 20.8. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Tic-Tac-Toe.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° Application:
01 class Application : public QApplication
02 {
03 Q_OBJECT
04 public:
05 Application(int &argc, char *argv[]);
06 void setTicTacToe(TicTacToe *tic);
07 void saveState(QSessionManager &sessionManager);
08 void commitData(QSessionManager &sessionManager);
09 private:
10 TicTacToe *ticTacToe;
11 };
ΠΠ»Π°ΡΡ Application ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° TicTacToe Π² Π·Π°ΠΊΡΡΡΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ.
01 void Application::saveState(QSessionManager &sessionManager)
02 {
03 QString fileName = ticTacToe->saveState();
04 QStringList discardCommand;
05 discardCommand << "rm" << fileName;
06 sessionManager.setDiscardCommand(discardCommand);
07 }
Π ΡΠΈΡΡΠ΅ΠΌΠ΅ X11 ΡΡΠ½ΠΊΡΠΈΡ saveState() Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΡΠ΅Π°Π½ΡΠΎΠ² ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ°Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅ΡΡΡ Π½Π° Π΄ΡΡΠ³ΠΈΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°Ρ , Π½ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ QSessionManager ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΠΌ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠ²ΡΠ·Ρ Ρ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠΎΠΌ ΡΠ΅Π°Π½ΡΠΎΠ².
ΠΡ Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ Ρ ΠΏΠΎΠΏΡΡΠΊΠΈ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠΌ TicTacToe ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°ΠΉΠ». ΠΠ°ΡΠ΅ΠΌ ΠΌΡ Π·Π°Π΄Π°Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ±ΡΠΎΡΠ° ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠΎΠΌ ΡΠ΅Π°Π½ΡΠΎΠ². ΠΠΎΠΌΠ°Π½Π΄Π° ΡΠ±ΡΠΎΡΠ° (discard command) β ΡΡΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΊΠΎΡΠΎΡΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΡΠ΅Π°Π½ΡΠΎΠ² Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π»ΡΠ±ΠΎΠΉ ΡΠΎΡ ΡΠ°Π½Π΅Π½Π½ΠΎΠΉ ΡΠ°Π½Π΅Π΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠΉ Ρ ΡΠ΅ΠΊΡΡΠΈΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ. Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ Π·Π°Π΄Π°Π΅ΠΌ Π΅Π΅ Π² Π²ΠΈΠ΄Π΅
rm ΡΠ°ΠΉΠ»_ΡΠ΅Π°Π½ΡΠ°
Π³Π΄Π΅ ΡΠ°ΠΉΠ»_ΡΠ΅Π°Π½ΡΠ° β ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΎΡ ΡΠ°Π½Π΅Π½Π½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠ΅Π°Π½ΡΠ°, a rm β ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ Unix.