01 void MainWindow::readSettings()
02 {
03 QSettings settings("Software Inc.", "Spreadsheet");
04 QRect rect = settings.value("geometry",
05 QRect(200, 200, 400, 400)).toRect();
06 move(rect.topLeft());
07 resize(rect.size());
08 recentFiles = settings.value("recentFiles").toStringList();
09 updateRecentFileActions();
10 bool showGrid = settings.value("showGrid", true).toBool();
11 showGridAction->setChecked(showGrid);
12 bool autoRecalc = settings.value("autoRecalc", true).toBool();
13 autoRecalcAction->setChecked(autoRecalc);
14 }
Π€ΡΠ½ΠΊΡΠΈΡ readSettings() Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ ΡΠΎΡ ΡΠ°Π½Π΅Π½Ρ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ writeSettings(). ΠΡΠΎΡΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ value() ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΠΎΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΡΡΡΡΡΡΠ²ΠΈΡ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°. ΠΡΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²ΡΠΎΡΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π½Π΅ Π·Π°Π΄Π°Π½ Π΄Π»Ρ ΡΠΏΠΈΡΠΊΠ° Π½Π΅Π΄Π°Π²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΠ°ΠΉΠ»ΠΎΠ², ΡΡΠΎΡ ΡΠΏΠΈΡΠΎΠΊ Π±ΡΠ΄Π΅Ρ ΠΏΡΡΡΡΠΌ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
Qt ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΠ½ΠΊΡΠΈΡ QWidget::setGeometry(), ΠΊΠΎΡΠΎΡΠ°Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡ QWidget:: geometry(), ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ΠΈ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΄ΠΎΠ»ΠΆΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ X11 ΠΈΠ·-Π·Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΎΠΊΠΎΠ½Π½ΡΡ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠΎΠ². ΠΠΎ ΡΡΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½Π΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π²ΠΌΠ΅ΡΡΠΎ Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ move() ΠΈ resize(). (ΠΠΎΠ΄ΡΠΎΠ±Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΠΎ ΡΠΎΠΌΡ Π²ΠΎΠΏΡΠΎΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ http://doc.trolltech.com/4.1/geometry.html.)
ΠΠ΅ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄ MainWindow, ΠΎΡΠ½ΠΎΡΡΡΠΈΠΉΡΡ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ QSettings, ΠΌΡ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΠ»ΠΈ Π² ΡΡΠ½ΠΊΡΠΈΡΡ readSettings() ΠΈ writeSettings(); ΡΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π»ΠΈΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ . ΠΠ±ΡΠ΅ΠΊΡ QSettings ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡΡΡ Π΄Π»Ρ Π·Π°ΠΏΡΠΎΡΠ° ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΊΠ°ΠΊΠΈΡ -Π½ΠΈΠ±ΡΠ΄Ρ Π½Π°ΡΡΡΠΎΠ΅ΠΊ Π² Π»ΡΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΈΠ· Π»ΡΠ±ΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ Π·Π°Π²Π΅ΡΡΠΈΠ»ΠΈ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° MainWindow ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΠ»Π΅ΠΊΡΡΠΎΠ½Π½Π°Ρ ΡΠ°Π±Π»ΠΈΡΠ°. Π ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΠ°Π·Π΄Π΅Π»Π°Ρ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΠ»Π΅ΠΊΡΡΠΎΠ½Π½Π°Ρ ΡΠ°Π±Π»ΠΈΡΠ° Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ ΡΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΊΡΠ°Π½Π½ΡΡ Π·Π°ΡΡΠ°Π²ΠΎΠΊ. ΠΡ Π·Π°Π²Π΅ΡΡΠΈΠΌ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΡΠΎΡΠΌΡΠ» ΠΈ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΡ, Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π³Π»Π°Π²Π΅.
Π Π°Π±ΠΎΡΠ° ΡΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ Π³ΠΎΡΠΎΠ²Ρ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ main() ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΠ»Π΅ΠΊΡΡΠΎΠ½Π½Π°Ρ ΡΠ°Π±Π»ΠΈΡΠ°:
01 #include <QApplication>
02 #include "mainwindow.h"
03 int main(int argc, char *argv[])
04 {
05 QApplication app(argc, argv);
06 MainWindow mainWin;
07 mainWin.show();
08 return app.exec();
09 }
ΠΠ°Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ main() Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΡ ΡΠ°Π½Π΅Π΅: ΠΌΡ ΡΠΎΠ·Π΄Π°Π»ΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ MainWindow Π² Π²ΠΈΠ΄Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΡΠ΅ΠΊΠ°, Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ new. ΠΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ MainWindow Π±ΡΠ΄Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½ ΠΏΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΡΠΈ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ main() ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΠ»Π΅ΠΊΡΡΠΎΠ½Π½Π°Ρ ΡΠ°Π±Π»ΠΈΡΠ° ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π²ΡΠ²ΠΎΠ΄ Π½Π° ΡΠΊΡΠ°Π½ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΎΠ΄Π½ΠΈΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠΌ. ΠΡΠ»ΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ², Π½Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΠ»Π΅ΠΊΡΡΠΎΠ½Π½Π°Ρ ΡΠ°Π±Π»ΠΈΡΠ°. ΠΠΎ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π½Π΅ ΡΠ°ΠΊ ΡΠ΄ΠΎΠ±Π½ΠΎ, ΠΊΠ°ΠΊ Π΅ΡΠ»ΠΈ Π±Ρ ΠΎΠ΄ΠΈΠ½ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π» Π²ΡΠ²ΠΎΠ΄ Π½Π° ΡΠΊΡΠ°Π½ ΠΌΠ½ΠΎΠ³ΠΈΡ Π³Π»Π°Π²Π½ΡΡ ΠΎΠΊΠΎΠ½, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΡΠΎΠΌΡ ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Π²Π΅Π±-Π±ΡΠ°ΡΠ·Π΅ΡΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠΊΠΎΠ½.
ΠΡ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΠ»Π΅ΠΊΡΡΠΎΠ½Π½Π°Ρ ΡΠ°Π±Π»ΠΈΡΠ° Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ°Π±ΠΎΡΡ ΡΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ. ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° Π½Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄ΠΎΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΌΠ΅Π½Ρ File:
β’ ΠΏΡΠ½ΠΊΡ ΠΌΠ΅Π½Ρ File | New ΡΠΎΠ·Π΄Π°Π΅Ρ Π½ΠΎΠ²ΠΎΠ΅ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Ρ ΠΏΡΡΡΡΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠΌ Π²ΠΌΠ΅ΡΡΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°;
β’ ΠΏΡΠ½ΠΊΡ ΠΌΠ΅Π½Ρ File | Close Π·Π°ΠΊΡΡΠ²Π°Π΅Ρ ΡΠ΅ΠΊΡΡΠ΅Π΅ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ;
β’ ΠΏΡΠ½ΠΊΡ ΠΌΠ΅Π½Ρ File | Exit Π·Π°ΠΊΡΡΠ²Π°Π΅Ρ Π²ΡΠ΅ ΠΎΠΊΠ½Π°.
Π ΠΈΡ. 3.16. ΠΠΎΠ²ΠΎΠ΅ ΠΌΠ΅Π½Ρ File.
Π ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΌΠ΅Π½Ρ File Π½Π΅ Π±ΡΠ»ΠΎ ΠΏΡΠ½ΠΊΡΠ° Close (Π·Π°ΠΊΡΡΡΡ), ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ Π²ΡΠΏΠΎΠ»Π½ΡΠ» Π±Ρ ΡΡ ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΡ, ΡΡΠΎ ΠΈ ΠΏΡΠ½ΠΊΡ ΠΌΠ΅Π½Ρ Exit. ΠΠΎΠ²Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ main() ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΠΈΠ΄:
01 int main(int argc, char *argv[])
02 {
03 QApplication app(argc, argv);
04 MainWindow *mainWin = new MainWindow;
05 mainWin->show();
06 return app.exec();
07 }
ΠΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ ΡΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ ΠΎΠΊΠ½Π°ΠΌΠΈ ΡΠ΅ΠΏΠ΅ΡΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ MainWindow ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ new, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π·Π°ΡΠ΅ΠΌ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ delete Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΏΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ Ρ Π½ΠΈΠΌ Ρ ΡΠ΅Π»ΡΡ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΠΈ ΠΏΠ°ΠΌΡΡΠΈ.
ΠΠΎΠ²ΡΠΉ ΡΠ»ΠΎΡ MainWindow::newFile() Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
01 void MainWindow::newFile()
02 {
03 MainWindow *mainWin = new MainWindow;
04 mainWin->show();
05 }
ΠΡ ΠΏΡΠΎΡΡΠΎ ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π½ΠΎΠ²ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ MainWindow. ΠΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΡΡΡΠ°Π½Π½ΡΠΌ, ΡΡΠΎ ΠΌΡ Π½ΠΈΠ³Π΄Π΅ Π½Π΅ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° Π½ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, Π½ΠΎ ΡΡΠΎ Π½Π΅ ΡΠΎΡΡΠ°Π²ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Qt ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅Ρ Π²ΡΠ΅ ΠΎΠΊΠ½Π°.
ΠΠ΅ΠΉΡΡΠ²ΠΈΡ Close ΠΈ Exit Π±ΡΠ΄ΡΡ Π·Π°Π΄Π°Π²Π°ΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
01 void MainWindow::createActions()
02 {
03 closeAction = new QAction(tr("&Close"), this);
04 closeAction->setShortcut(tr("Ctrl+W"));
05 closeAction->setStatusTip(tr("Close this window"));
06 connect(closeAction, SIGNAL(triggered()), this, SLOT(close()));
07 exitAction = new QAction(tr("E&xit"), this);
08 exitAction->setShortcut(tr("Ctrl+Q"));
09 exitAction->setStatusTip(tr("Exit the application"));
10 connect(exitAction, SIGNAL(triggered()),
11 qApp, SLOT(closeAllWindows()));
12 }
Π‘Π»ΠΎΡ closeAllWindows() ΠΎΠ±ΡΠ΅ΠΊΡΠ° QApplication Π·Π°ΠΊΡΡΠ²Π°Π΅Ρ Π²ΡΠ΅ ΠΎΠΊΠ½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π΅ΡΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠ΅ ΠΈΠ· Π½ΠΈΡ Π½Π΅ ΠΎΡΠΊΠ»ΠΎΠ½ΡΠ΅Ρ Π·Π°ΠΏΡΠΎΡ (event) Π½Π° Π΅Π³ΠΎ Π·Π°ΠΊΡΡΡΠΈΠ΅. ΠΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΊΠΎΠΉ ΡΠ΅ΠΆΠΈΠΌ ΡΠ°Π±ΠΎΡΡ Π½Π°ΠΌ Π·Π΄Π΅ΡΡ Π½ΡΠΆΠ΅Π½. ΠΠ°ΠΌ Π½Π΅ Π½Π°Π΄ΠΎ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡΡΡΡ ΠΎ Π½Π΅ΡΠΎΡ ΡΠ°Π½Π΅Π½Π½ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΡ , ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΡΠΎΠ³ΠΎ ΡΠΎΠ±ΡΡΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ MainWindow::closeEvent() ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π·Π°ΠΊΡΡΡΠΈΠΈ ΠΎΠΊΠ½Π°.
ΠΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡΠΌΠ°ΡΡ, ΡΡΠΎ Π½Π° ΡΡΠΎΠΌ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅Π³ΠΎ ΡΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ. Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΠΎΠ΄Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΎΠΊΠ°Π·Π°Π»Π°ΡΡ Π½Π΅Π·Π°ΠΌΠ΅ΡΠ΅Π½Π½ΠΎΠΉ. ΠΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈ Π·Π°ΠΊΡΡΠ²Π°ΡΡ Π³Π»Π°Π²Π½ΡΠ΅ ΠΎΠΊΠ½Π°, Π² ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ Ρ Π²Π°ΡΠΈΡΡ ΠΏΠ°ΠΌΡΡΠΈ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°. ΠΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π²ΠΈΠ΄ΠΆΠ΅ΡΡ MainWindow Π² ΡΡΠ½ΠΊΡΠΈΠΈ newFile(), Π½ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΠ΄Π°Π»ΡΠ΅ΠΌ ΠΈΡ . ΠΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π·Π°ΠΊΡΡΠ²Π°Π΅Ρ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, ΠΎΠ½ΠΎ ΠΈΡΡΠ΅Π·Π°Π΅Ρ Ρ ΡΠΊΡΠ°Π½Π°, Π½ΠΎ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΠΎΡΡΠ°Π΅ΡΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ. ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΎΠΊΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°.
Π Π΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ ΠΏΡΠΈΠ·Π½Π°ΠΊΠ° Qt::WA_DeleteOnClose Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅:
01 MainWindow::MainWindow()
02 {
03 setAttribute(Qt::WA_DeleteOnClose);
04 }
ΠΡΠΎ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Qt Π½Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΎΠΊΠ½Π° ΠΏΡΠΈ Π΅Π³ΠΎ Π·Π°ΠΊΡΡΡΠΈΠΈ. ΠΡΠΎΠΌΠ΅ Qt::WA_DeleteOnClose Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ QWidget ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΈΡ ΡΠ»Π°ΠΆΠΊΠΎΠ², Π·Π°Π΄Π°Π²Π°Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΉ ΡΠ΅ΠΆΠΈΠΌ ΡΠ°Π±ΠΎΡΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°.
Π£ΡΠ΅ΡΠΊΠ° ΠΏΠ°ΠΌΡΡΠΈ β Π½Π΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡΠΎΠ»ΠΊΠ½ΡΡΡΡΡ. Π Π½Π°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π»ΠΎΡΡ, ΡΡΠΎ Ρ Π½Π°Ρ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ. ΠΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ ΡΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ ΠΎΠΊΠ½Π°ΠΌΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠ²ΠΎΠΉ ΡΠΏΠΈΡΠΎΠΊ ΡΠ°ΠΉΠ»ΠΎΠ², ΠΎΡΠΊΡΡΠ²Π°Π²ΡΠΈΡ ΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌΠΈ, ΠΈ ΡΠ²ΠΎΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠ°Π±ΠΎΡΡ. ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ ΠΎΡΠΊΡΡΠ²Π°Π²ΡΠΈΡ ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΠ½ΠΎΡΠΈΡΡΡΡ ΠΊΠΎ Π²ΡΠ΅ΠΌΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ ΠΏΡΡΠ΅ΠΌ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ recentFiles, ΠΈ ΡΠΎΠ³Π΄Π° Π²ΠΎ Π²ΡΠ΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π΅Π΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ. ΠΠΎ Π·Π΄Π΅ΡΡ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ updateRecentFileActions() Π΄Π»Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΌΠ΅Π½Ρ File Π²ΡΠ·ΠΎΠ² Π΅Π΅ Π΄Π»Ρ Π²ΡΠ΅Ρ Π³Π»Π°Π²Π½ΡΡ ΠΎΠΊΠΎΠ½. ΠΡΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄:
foreach (QWidget *win, QApplication::topLevelWidgets()) {
if (MainWindow *mainWin = qobject_cast<MainWindow *>(win))
mainWin->updateRecentFileActions();
}
ΠΠ΄Π΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ Qt foreach (ΠΎΠ½Π° ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ Π² Π³Π»Π°Π²Π΅ 11) Π΄Π»Ρ ΠΏΡΠΎΡ ΠΎΠ΄Π° ΠΏΠΎ Π²ΡΠ΅ΠΌ ΠΈΠΌΠ΅ΡΡΠΈΠΌΡΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°ΠΌ ΠΈ Π΄Π΅Π»Π°Π΅ΡΡΡ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ updateRecentFileItems() Π΄Π»Ρ Π²ΡΠ΅Ρ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ² ΡΠΈΠΏΠ° MainWindow. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ ΠΎΠΏΡΠΈΠΉ ShowGrid ΠΈ AutoβRecalculate ΠΈΠ»ΠΈ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π½Π΅ Π·Π°Π³ΡΡΠΆΠ΅Π½Ρ Π΄Π²Π° ΡΠ°ΠΉΠ»Π° Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ.
Π ΠΈΡ. 3.17. ΠΠ΄Π½ΠΎΠ΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ½ΡΠΉ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ.
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΠ΅ ΡΠ°Π±ΠΎΡΡ Ρ ΠΎΠ΄Π½ΠΈΠΌ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠΌ Π² Π³Π»Π°Π²Π½ΠΎΠΌ ΠΎΠΊΠ½Π΅, Π½Π°Π·ΡΠ²Π°ΡΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ Ρ ΠΎΠ΄Π½ΠΎΠ΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ½ΡΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ (SDI β single document interface). Π Π°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΠΎΠΉ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²ΠΎΠΉ Π΅ΠΌΡ Π² Windows ΡΡΠ°Π» ΠΌΠ½ΠΎΠ³ΠΎΠ΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ (MDI β multiple document interface), ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ΄Π½ΠΎ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, Π² ΡΠ΅Π½ΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΠΎΠ³ΡΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ ΠΎΠΊΠ½Π° ΠΌΠ½ΠΎΠ³ΠΈΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ². Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ΅Π΄ΡΡΠ² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Qt ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΊΠ°ΠΊ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ SDI, ΡΠ°ΠΊ ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ MDI Π½Π° Π²ΡΠ΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°Ρ . ΠΠ° ΡΠΈΡ. 3.17 ΠΏΠΎΠΊΠ°Π·Π°Π½ Π²ΠΈΠ΄ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΠ»Π΅ΠΊΡΡΠΎΠ½Π½Π°Ρ ΡΠ°Π±Π»ΠΈΡΠ° ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠ±ΠΎΠΈΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠ². ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ MDI ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ Π² Π³Π»Π°Π²Π΅ 6 (Β«Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠΎΠΉΒ»).
ΠΠΊΡΠ°Π½Π½ΡΠ΅ Π·Π°ΡΡΠ°Π²ΠΊΠΈ