ΠΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ Π²ΡΠ²ΠΎΠ΄ΡΡ Π½Π° ΡΠΊΡΠ°Π½ Π·Π°ΡΡΠ°Π²ΠΊΠΈ. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌΠΈ Π·Π°ΡΡΠ°Π²ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΌΠ΅Π½Π΅Π΅ Π·Π°ΠΌΠ΅ΡΠ½ΡΠΌ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΠΉ Π·Π°ΠΏΡΡΠΊ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π° Π² Π΄ΡΡΠ³ΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΡΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ Π΄Π»Ρ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΠ΅Π½ΠΈΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΎΡΠ΄Π΅Π»Π΅Π½ΠΈΠΉ, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠΈΡ Π·Π° ΠΌΠ°ΡΠΊΠ΅ΡΠΈΠ½Π³. ΠΠΎΠΆΠ½ΠΎ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π·Π°ΡΡΠ°Π²ΠΊΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Qt, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΊΠ»Π°ΡΡ QSplashScreen.
ΠΠ»Π°ΡΡ QSplashScreen Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π½Π° ΡΠΊΡΠ°Π½ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°. ΠΠ½ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ²Π΅ΡΡΠΈ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΠΈΠ½ΡΠΎΡΠΌΠΈΡΡΡΡΠ΅Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΎ Ρ ΠΎΠ΄Π΅ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ±ΡΡΠ½ΠΎ Π²ΡΠ·ΠΎΠ² Π·Π°ΡΡΠ°Π²ΠΊΠΈ Π΄Π΅Π»Π°Π΅ΡΡΡ Π² ΡΡΠ½ΠΊΡΠΈΠΈ main() Π΄ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ QApplication::exec().
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΏΡΠΈΠΌΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ main(), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ QSplashScreen Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° Π·Π°ΡΡΠ°Π²ΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠ΅ΡΠ΅Π²ΡΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅.
01 int main(int argc, char *argv[])
02 {
03 QApplication app(argc, argv);
04 QSplashScreen *splash = new QSplashScreen;
05 splash->setPixmap(QPixmap(":/images/splash.png"));
06 splash->show();
07 Qt::Alignment topRight = Qt::AlignRight | Qt::AlignTop;
08 splash->showMessage(QObject::tr("Setting up the main windowβ¦"),
09 topRight, Qt::white);
10 MainWindow mainWin;
11 splash->showMessage(QObject::tr("Loading modulesβ¦"),
12 topRight, Qt::white);
13 loadModules();
14 splash->showMessage(QObject::tr("Establishing connectionsβ¦"),
15 topRight, Qt::white);
16 establishConnections();
17 mainWin.show();
18 splash->finish(&mainWin);
19 delete splash;
20 return app.exec();
21 }
Π ΠΈΡ. 3.18. ΠΠΊΡΠ°Π½Π½Π°Ρ Π·Π°ΡΡΠ°Π²ΠΊΠ°.
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ Π·Π°Π²Π΅ΡΡΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΠ»Π΅ΠΊΡΡΠΎΠ½Π½Π°Ρ ΡΠ°Π±Π»ΠΈΡΠ°. Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π³Π»Π°Π²Π΅ ΠΌΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ Π±Π°Π·ΠΎΠ²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ ΠΈ Π½Π° ΡΡΠΎΠΌ Π·Π°Π²Π΅ΡΡΠΈΠΌ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠ»Π°Π²Π° 4. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
Π Π΄Π²ΡΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ Π³Π»Π°Π²Π°Ρ ΠΌΡ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ ΡΠΏΠΎΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΠ»Π΅ΠΊΡΡΠΎΠ½Π½Π°Ρ ΡΠ°Π±Π»ΠΈΡΠ°. Π Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π΅ ΠΌΡ Π·Π°Π²Π΅ΡΡΠΈΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΡ ΡΠ°Π±ΠΎΡΡ ΡΡΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ², Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ, ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Ρ Π±ΡΡΠ΅ΡΠΎΠΌ ΠΎΠ±ΠΌΠ΅Π½Π° (clipboard) ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΡΠΎΡΠΌΡΠ» ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ ΠΊ ΠΊΠ»Π°ΡΡΡ QTableWidget.
Π¦Π΅Π½ΡΡΠ°Π»ΡΠ½ΡΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ
Π¦Π΅Π½ΡΡΠ°Π»ΡΠ½ΡΡ ΠΎΠ±Π»Π°ΡΡΡ QMainWindow ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π½ΠΈΠΌΠ°ΡΡ Π»ΡΠ±ΠΎΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ. ΠΠΈΠΆΠ΅ Π΄Π°Π΅ΡΡΡ ΠΊΡΠ°ΡΠΊΠΈΠΉ ΠΎΠ±Π·ΠΎΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ².
1. Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ Qt
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅Π½ΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ Π²ΠΈΠ΄ΠΆΠ΅ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ QTableWidget ΠΈΠ»ΠΈ QTextEdit. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ°ΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠ°ΠΊ Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΈ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ², Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠ΅ QMainWindow).
2. ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ
Π ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ ΡΠ°ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΌ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΈΠΊΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΌΠΎΠ³Π»Π° Π±Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅Π½ΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΠΈΠ΄ΠΆΠ΅Ρ IconEditor. Π Π³Π»Π°Π²Π΅ 5 ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ ΡΠΏΠΎΡΠΎΠ±Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ΅Π΄ΡΡΠ² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Qt.
3. ΠΠ°Π·ΠΎΠ²ΡΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ QWidget Ρ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠΎΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ
ΠΠ½ΠΎΠ³Π΄Π° Π² ΡΠ΅Π½ΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ². ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ QWidget Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊΠΎ Π²ΡΠ΅ΠΌ Π΄ΡΡΠ³ΠΈΠΌ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°ΠΌ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ Π΄Π»Ρ Π·Π°Π΄Π°Π½ΠΈΡ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΌ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°ΠΌ ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
4. Π Π°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ
ΠΡΡΠ³ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π² ΡΠ΅Π½ΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ² Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ QSplitter. QSplitter ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅Ρ ΡΠ²ΠΎΠΈ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠ΅ Π²ΠΈΠ΄ΠΆΠ΅ΡΡ ΠΏΠΎ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΠΈ ΠΈΠ»ΠΈ ΠΏΠΎ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΠΈ ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΠΌΠΈ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ². Π Π°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»ΠΈ ΠΌΠΎΠ³ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π»ΡΠ±ΡΠ΅ Π²ΠΈΠ΄ΠΆΠ΅ΡΡ, Π²ΠΊΠ»ΡΡΠ°Ρ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»ΠΈ.
5. Π Π°Π±ΠΎΡΠ°Ρ ΠΎΠ±Π»Π°ΡΡΡ (workspace) ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° MDI
ΠΡΠ»ΠΈ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ MDI, ΡΠ΅Π½ΡΡΠ°Π»ΡΠ½ΡΡ ΠΎΠ±Π»Π°ΡΡΡ Π±ΡΠ΄Π΅Ρ Π·Π°Π½ΠΈΠΌΠ°ΡΡ Π²ΠΈΠ΄ΠΆΠ΅Ρ QWorkspace, Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° MDI Π±ΡΠ΄Π΅Ρ ΡΠ²Π»ΡΡΡΡΡ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΌ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠΌ.
ΠΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΈ, ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»ΠΈ ΠΈ ΡΠ°Π±ΠΎΡΠΈΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ MDI ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌΠΈ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°ΠΌΠΈ Qt ΠΈΠ»ΠΈ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΌΠΈ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°ΠΌΠΈ. Π Π³Π»Π°Π²Π΅ 6 ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ ΡΡΠΈ ΠΊΠ»Π°ΡΡΡ.
Π ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΠ»Π΅ΠΊΡΡΠΎΠ½Π½Π°Ρ ΡΠ°Π±Π»ΠΈΡΠ° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅Π½ΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡ ΠΊΠ»Π°ΡΡΠ° QTableWidget. ΠΠ»Π°ΡΡ QTableWidget ΡΠΆΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π½Π°ΠΌ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ, Π½ΠΎ ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ ΡΠΎΡΠΌΡΠ»Ρ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ Π²ΠΈΠ΄Π° Β«=Al+A2+A3Β» ΠΈ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ Π±ΡΡΠ΅ΡΠΎΠΌ ΠΎΠ±ΠΌΠ΅Π½Π°. ΠΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ ΡΡΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΠΊΠ»Π°ΡΡΠ΅ Spreadsheet, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°ΡΠ»Π΅Π΄ΡΠ΅Ρ QTableWidget.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠ° QTableWidget
ΠΠ»Π°ΡΡ Spreadsheet Π½Π°ΡΠ»Π΅Π΄ΡΠ΅Ρ QTableWidget. ΠΠΈΠ΄ΠΆΠ΅Ρ QTableWidget ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΠΊΠΎΠΉ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠ΅ΠΉ ΡΠΎΠ±ΠΎΠΉ Π΄Π²ΡΠΌΠ΅ΡΠ½ΡΠΉ ΡΠ°Π·ΡΡΠΆΠ΅Π½Π½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ². ΠΠ° Π½Π΅ΠΌ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ ΡΠ°ΡΡΡ ΡΡΠ΅Π΅ΠΊ Π²ΡΠ΅ΠΉ ΡΠ΅ΡΠΊΠΈ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½Π°Ρ ΠΏΡΠΈ ΠΏΡΠΎΠΊΡΡΡΠΊΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ. ΠΡΠΈ Π²Π²ΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΡΠ΅ΠΊΡΡΠ° Π² ΠΏΡΡΡΡΡ ΡΡΠ΅ΠΉΠΊΡ QTableWidget Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½Ρ QTableWidgetItem Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ°.
ΠΠ°Π²Π°ΠΉΡΠ΅ Π½Π°ΡΠ½Π΅ΠΌ Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° ΠΈ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΡΠΈΠ²Π΅Π΄Π΅ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ»:
01 #ifndef SPREADSHEET_H
02 #define SPREADSHEET_H
03 #include <QTableWidget>
04 class Cell;
05 class SpreadsheetCompare;
ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ ΠΊΠ»Π°ΡΡΠΎΠ² Cell ΠΈ SpreadsheetCompare.
Π ΠΈΡ. 4.1. ΠΠ΅ΡΠ΅Π²ΡΡ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠΎΠ² Spreadsheet ΠΈ Cell.
Π’Π°ΠΊΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ ΡΡΠ΅ΠΉΠΊΠΈ QTableWidget, ΠΊΠ°ΠΊ Π΅Π΅ ΡΠ΅ΠΊΡΡ ΠΈ Π²ΡΡΠ°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅, Ρ ΡΠ°Π½ΡΡΡΡ Π² QTableWidgetltem. Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ QTableWidget, ΠΊΠ»Π°ΡΡ QTableWidgetltem Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠΌ; ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ Π΄Π°Π½Π½ΡΡ . ΠΠ»Π°ΡΡ Cell Π½Π°ΡΠ»Π΅Π΄ΡΠ΅Ρ QTableWidgetltem, ΠΈ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΡΠΎΡ ΠΊΠ»Π°ΡΡ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Ρ, Π³Π΄Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ Π΅Π³ΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ.
06 class Spreadsheet : public QTableWidget
07 {
08 Q_OBJECT
09 public:
10 Spreadsheet(QWidget *parent = 0);
11 bool autoRecalculate() const { return autoRecalc; }
12 QString currentLocation() const;
13 QString currentFormula() const;
14 QTableWidgetSelectionRange selectedRange() const;
15 void clear();
16 bool readFile(const QString &fileName);
17 bool writeFile(const QString &fileName);
18 void sort(const SpreadsheetCompare &compare);
Π€ΡΠ½ΠΊΡΠΈΡ autoRecalculate() ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ Π²ΡΡΡΠΎΠ΅Π½Π½Π°Ρ (inline), ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½Π° Π»ΠΈΡΡ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π½ ΠΈΠ»ΠΈ Π½Π΅Ρ ΡΠ΅ΠΆΠΈΠΌ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΡΠ΅ΡΠ°.
Π Π³Π»Π°Π²Π΅ 3 ΠΌΡ ΠΎΠΏΠΈΡΠ°Π»ΠΈΡΡ Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΎΡΠΊΡΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΊΠ»Π°ΡΡΠ° ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ Spreadsheet ΠΏΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ MainWindow ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠ· MainWindow::newFile() ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ clear() Π΄Π»Ρ ΠΎΡΠΈΡΡΠΊΠΈ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π»ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΎΡ QTableWidget, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ setCurrentCell() ΠΈ setShowGrid().
19 public slots:
20 void cut();
21 void copy();
22 void paste();
23 void del();
24 void selectCurrentRow();
25 void selectCurrentColumn();
26 void recalculate();
27 void setAutoRecalculate(bool recalc);
28 void findNext(const QString &str, Qt::CaseSensitivity cs);
29 void findPrevious(const QString &str, Qt::CaseSensitivity cs);
30 signals:
31 void modified();
ΠΠ»Π°ΡΡ Spreadsheet ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΡΠ½ΠΊΡΠΎΠ² ΠΌΠ΅Π½Ρ Edit, Tools ΠΈ Options, ΠΈ ΠΎΠ½ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΠ΄ΠΈΠ½ ΡΠΈΠ³Π°Π» modified() Π΄Π»Ρ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ.
32 private slots:
33 void somethingChanged();
ΠΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΎΠ΄ΠΈΠ½ Π·Π°ΠΊΡΡΡΡΠΉ ΡΠ»ΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²Π½ΡΡΡΠΈ ΠΊΠ»Π°ΡΡΠ° Spreadsheet.
34 private:
35 enum { MagicNumber = 0x7F51C883, RowCount = 999, ColumnCount = 26 };
36 Cell *cell(int row, int column) const;
37 QString text(int row, int column) const;
38 QString formula(int row, int column) const;
39 void setFormula(int row, int column, const QString &formula);
40 bool autoRecalc;
41 };
Π Π·Π°ΠΊΡΡΡΠΎΠΉ ΡΠ΅ΠΊΡΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΌΡ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΠΌ ΡΡΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ, ΡΠ΅ΡΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΎΠ΄Π½Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ.
42 class SpreadsheetCompare
43 {
44 public:
45 bool operator()(const QStringList &row1, const QStringList &row2) const;
46 enum { KeyCount = 3 };
47 int keys[KeyCount];
48 bool ascending[KeyCount];
49 };
50 #endif
ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠ»Π°ΡΡΠ° SpreadsheetCompare. ΠΡ ΠΎΠ±ΡΡΡΠ½ΠΈΠΌ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΏΡΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Spreadsheet::sort().