01 void MailClient::writeSettings()
02 {
03 QSettings settings("Software Inc.", "Mail Client");
04 settings.beginGroup("mainWindow");
05 settings.setValue("size", size());
06 settings.setValue("mainSplitter", mainSplitter->saveState());
07 settings.setValue("rightSplitter", rightSplitter->saveState());
08 settings.endGroup();
09 }
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎ ΡΡΠ΅Π½ΠΈΡ Π½Π°ΡΡΡΠΎΠ΅ΠΊ readSettings():
01 void MailClient::readSettings()
02 {
03 QSettings settings("Software Inc.", "Mail Client");
04 settings.beginGroup("mainWindow");
05 resize(settings.value("size", QSize(480, 360)).toSize());
06 mainSplitter->restoreState(
07 settings.value("mainSplitter").toByteArray());
08 rightSplitter->restoreState(
09 settings.value("rightSplitter").toByteArray());
10 settings.endGroup();
11 }
Π Π°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ QSplitter ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Qt Designer. ΠΠ»Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ² Π² ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Π΅ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠ΅ Π²ΠΈΠ΄ΠΆΠ΅ΡΡ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π² ΡΠΎ ΠΌΠ΅ΡΡΠΎ, Π³Π΄Π΅ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ, Π²ΡΠ΄Π΅Π»ΠΈΡΠ΅ ΠΈΡ ΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΠΏΡΠ½ΠΊΡ ΠΌΠ΅Π½Ρ Form | Lay Out Horizontally in Splitter ΠΈΠ»ΠΈ Form | Lay Out Vertically in Splitter (Π€ΠΎΡΠΌΠ° | ΠΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ° no roΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΠΈ Π² ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ΠΈΠ»ΠΈ Π€ΠΎΡΠΌΠ° | ΠΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ° ΠΏΠΎ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΠΈ Π² ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ).
ΠΠ±Π»Π°ΡΡΠΈ Ρ ΠΏΡΠΎΠΊΡΡΡΠΊΠΎΠΉ
ΠΠ»Π°ΡΡ QScrollArea ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΠ±Π»Π°ΡΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠΊΡΡΡΠΈΠ²Π°ΡΡ, ΠΈ Π΄Π²Π΅ ΠΏΠΎΠ»ΠΎΡΡ ΠΏΡΠΎΠΊΡΡΡΠΊΠΈ. ΠΡΠ»ΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² Π²ΠΈΠ΄ΠΆΠ΅Ρ ΠΏΠΎΠ»ΠΎΡΡ ΠΏΡΠΎΠΊΡΡΡΠΊΠΈ, Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡ QScrollArea, ΡΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ²ΠΎΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ QScrollBar ΠΈ ΡΠ°ΠΌΠΈΠΌ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ ΡΠΊΡΠΎΠ»Π»ΠΈΠ½Π³Π°.
Π ΠΈΡ. 6.11. ΠΠΈΠ΄ΠΆΠ΅ΡΡ, ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΠΎΠ±Π»Π°ΡΡΡ Ρ ΠΏΡΠΎΠΊΡΡΡΠΊΠΎΠΉ QScrollArea.
Π‘ΠΏΠΎΡΠΎΠ± ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ QScrollArea ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ: Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ setWidget() Ρ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠΌ, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠΎΠ»ΠΎΡΡ ΠΏΡΠΎΠΊΡΡΡΠΊΠΈ. QScrollArea Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π΄Π΅Π»Π°Π΅Ρ ΡΡΠΎΡ Π²ΠΈΠ΄ΠΆΠ΅Ρ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΌ (Π΅ΡΠ»ΠΈ ΠΎΠ½ Π΅ΡΠ΅ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΠΊΠΎΠ²ΡΠΌ) ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΊ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ (ΠΎΠ½ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ QScrollArea::viewport()). ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΈΠΌΠ΅ΡΡ ΠΏΠΎΠ»ΠΎΡΡ ΠΏΡΠΎΠΊΡΡΡΠΊΠΈ Π²ΠΎΠΊΡΡΠ³ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° IconEditor, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ Π² Π³Π»Π°Π²Π΅ 5, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ°ΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ:
01 int main(int argc, char *argv[])
02 {
03 QApplication app(argc, argv);
04 IconEditor *iconEditor = new IconEditor;
05 iconEditor->setIconImage(QImage(":/images/mouse.png"));
06 QScrollArea scrollArea;
07 scrollArea.setWidget(iconEditor);
08 scrollArea.viewport()->setBackgroundRole(QPalette::Dark);
09 scrollArea.viewport()->setAutoFillBackground(true);
10 scrollArea.setWindowTitle(QObject::tr("Icon Editor"));
11 scrollArea.show();
12 return app.exec();
13 }
Π ΠΈΡ. 6.12. ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΠΎΠ±Π»Π°ΡΡΠΈ Ρ ΠΏΡΠΎΠΊΡΡΡΠΊΠΎΠΉ QScrollArea.
QScrollArea ΠΏΡΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΅Π³ΠΎ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΈΠ»ΠΈ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° Π΅ΡΠ΅ Π½ΠΈ ΡΠ°Π·Ρ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ»ΠΈΡΡ. ΠΠ΅Π»Π°Ρ Π²ΡΠ·ΠΎΠ² setWidgetResizable(true), ΠΌΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ QScrollArea Π½Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°, ΡΡΠΎΠ±Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π»ΡΠ±ΡΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎΠΌ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ Π΅Π³ΠΎ ΠΈΠ΄Π΅Π°Π»ΡΠ½ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ².
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΠΎΠ»ΠΎΡΡ ΠΏΡΠΎΠΊΡΡΡΠΊΠΈ Π²ΠΈΠ΄Π½Ρ Π½Π° ΡΠΊΡΠ°Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±Π»Π°ΡΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΌΠ΅Π½ΡΡΠ΅ Π΄ΠΎΡΠ΅ΡΠ½Π΅Π³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΠΎΠ»ΠΎΡΡ ΠΏΡΠΎΠΊΡΡΡΠΊΠΈ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ Π²ΠΈΠ΄ΠΈΠΌΡΠΌΠΈ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊ ΠΏΠΎΠ»ΠΎΡ ΠΏΡΠΎΠΊΡΡΡΠΊΠΈ:
scrollArea.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
scrollArea.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
QScrollArea Π±ΠΎΠ»ΡΡΡΡ ΡΠ°ΡΡΡ ΡΠ²ΠΎΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ Π½Π°ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΡ QAbstractScrollArea. Π’Π°ΠΊΠΈΠ΅ ΠΊΠ»Π°ΡΡΡ, ΠΊΠ°ΠΊ QTextEdit ΠΈ QAbstractItemView (Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² Qt), ΡΠ²Π»ΡΡΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΌΠΈ ΠΎΡ QAbstractScrollArea, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π°ΠΌ Π½Π΅ Π½Π°Π΄ΠΎ Π΄Π»Ρ Π½ΠΈΡ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΡ ΠΈΠ· QScrollArea Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΠΎΡ ΠΏΡΠΎΠΊΡΡΡΠΊΠΈ.
ΠΡΠΈΠΊΡΠ΅ΠΏΠ»ΡΠ΅ΠΌΡΠ΅ Π²ΠΈΠ΄ΠΆΠ΅ΡΡ ΠΈ ΠΏΠ°Π½Π΅Π»ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ²
ΠΡΠΈΠΊΡΠ΅ΠΏΠ»ΡΠ΅ΠΌΡΠΌΠΈ ΡΠ²Π»ΡΡΡΡΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΊΡΠ΅ΠΏΠΈΡΡΡΡ ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ ΠΎΠ±Π»Π°ΡΡΡΠΌ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ QMainWindow ΠΈΠ»ΠΈ Π±ΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΌΠΈ Β«ΠΏΠ»Π°Π²Π°ΡΡΠΈΠΌΠΈΒ» ΠΎΠΊΠ½Π°ΠΌΠΈ. QMainWindow ΠΈΠΌΠ΅Π΅Ρ ΡΠ΅ΡΡΡΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΊΡΠ΅ΠΏΠ»Π΅Π½ΠΈΡ ΡΠ°ΠΊΠΈΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ²: ΠΎΠ΄Π½Π° ΡΠ²Π΅ΡΡ Ρ, ΠΎΠ΄Π½Π° ΡΠ½ΠΈΠ·Ρ, ΠΎΠ΄Π½Π° ΡΠ»Π΅Π²Π° ΠΈ ΠΎΠ΄Π½Π° ΡΠΏΡΠ°Π²Π° ΠΎΡ ΡΠ΅Π½ΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°. Π ΡΠ°ΠΊΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ , ΠΊΠ°ΠΊ Microsoft Visual Studio ΠΈ Qt Linguist, ΡΠΈΡΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»ΡΠ΅ΠΌΡΠ΅ ΠΎΠΊΠ½Π° Π΄Π»Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΎΡΠ΅Π½Ρ Π³ΠΈΠ±ΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. Π Qt ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»ΡΠ΅ΠΌΡΠ΅ Π²ΠΈΠ΄ΠΆΠ΅ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΠΊΠ»Π°ΡΡΠ° QDockWidget.
ΠΠ°ΠΆΠ΄ΡΠΉ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»ΡΠ΅ΠΌΡΠΉ Π²ΠΈΠ΄ΠΆΠ΅Ρ ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, Π΄Π°ΠΆΠ΅ ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»Π΅Π½. ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΌΠΎΠ³ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»ΡΠ΅ΠΌΡΠ΅ ΠΎΠΊΠ½Π° Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΠ° ΠΊΡΠ΅ΠΏΠ»Π΅Π½ΠΈΡ Π½Π° Π΄ΡΡΠ³ΠΎΠ΅, ΠΏΠ΅ΡΠ΅Π΄Π²ΠΈΠ³Π°Ρ ΠΏΠΎΠ»ΠΎΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°. ΠΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΡΠΎΠ΅Π΄ΠΈΠ½ΡΡΡ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»ΡΠ΅ΠΌΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΎΡ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΊΡΠ΅ΠΏΠ»Π΅Π½ΠΈΡ ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ Π΅Π³ΠΎ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΌ ΠΏΠ»Π°Π²Π°ΡΡΠΈΠΌ ΠΎΠΊΠ½ΠΎΠΌ, ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Ρ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»ΡΠ΅ΠΌΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π²Π½Π΅ ΠΎΠ±Π»Π°ΡΡΠ΅ΠΉ ΠΊΡΠ΅ΠΏΠ»Π΅Π½ΠΈΡ. Π‘Π²ΠΎΠ±ΠΎΠ΄Π½ΡΠ΅ ΠΏΠ»Π°Π²Π°ΡΡΠΈΠ΅ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»ΡΠ΅ΠΌΡΠ΅ ΠΎΠΊΠ½Π° Π²ΡΠ΅Π³Π΄Π° Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Β«ΠΏΠΎΠ²Π΅ΡΡ Β» ΠΈΡ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°. ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΌΠΎΠ³ΡΡ Π·Π°ΠΊΡΡΡΡ QDockWidget, ΡΠ΅Π»ΠΊΠ°Ρ ΠΏΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π·Π°ΠΊΡΡΡΠΈΡ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ°. ΠΡΠ±ΡΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ ΡΡΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΊΠ»ΡΡΠ°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²ΡΠ·ΠΎΠ²Π° QDockWidget::setFeatures().
Π ΠΈΡ. 6.13. QMainWindow Ρ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»Π΅Π½Π½ΡΠΌ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠΌ.
Π ΡΠ°Π½Π½ΠΈΡ Π²Π΅ΡΡΠΈΡΡ Qt ΠΏΠ°Π½Π΅Π»ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π»ΠΈΡΡ ΠΊΠ°ΠΊ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»ΡΠ΅ΠΌΡΠ΅ Π²ΠΈΠ΄ΠΆΠ΅ΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ ΡΠ΅ ΠΆΠ΅ ΡΠ°ΠΌΡΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΊΡΠ΅ΠΏΠ»Π΅Π½ΠΈΡ. ΠΠ°ΡΠΈΠ½Π°Ρ Ρ Qt 4 ΠΏΠ°Π½Π΅Π»ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡΡΡ Π² ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΠΎΠ±Π»Π°ΡΡΡΡ , ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΡ ΠΏΠΎ ΠΏΠ΅ΡΠΈΠΌΠ΅ΡΡΡ ΡΠ΅Π½ΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° (ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠΈΡ. 6.14), ΠΈ ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΠΎΡΠΊΡΠ΅ΠΏΠ»ΡΡΡΡΡ. ΠΡΠ»ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΈΠΌΠ΅ΡΡ ΠΏΠ»Π°Π²Π°ΡΡΡΡ ΠΏΠ°Π½Π΅Π»Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ², ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π΅Π΅ Π²Π½ΡΡΡΡ QDockWindow.
Π ΠΈΡ. 6.14. ΠΠ±Π»Π°ΡΡΠΈ ΠΊΡΠ΅ΠΏΠ»Π΅Π½ΠΈΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ² ΠΈ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΠ°Π½Π΅Π»Π΅ΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² QMainWindow.
Π£Π³Π»Ρ, ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½Π½ΡΠ΅ ΠΏΡΠ½ΠΊΡΠΈΡΠ½ΡΠΌΠΈ Π»ΠΈΠ½ΠΈΡΠΌΠΈ, ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΡ ΠΎΠ±Π΅ΠΈΠΌ ΡΠΎΡΠ΅Π΄Π½ΠΈΠΌ ΠΎΠ±Π»Π°ΡΡΡΠΌ ΠΊΡΠ΅ΠΏΠ»Π΅Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π²Π΅ΡΡ Π½ΠΈΠΉ Π»Π΅Π²ΡΠΉ ΡΠ³ΠΎΠ» Π½Π°Π·Π½Π°ΡΠΈΡΡ Π»Π΅Π²ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΊΡΠ΅ΠΏΠ»Π΅Π½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²ΡΠ·ΠΎΠ²Π° QMainWindow::setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea).
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊ Π΄Π»Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° (Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π΄Π»Ρ QTreeWidget) ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΎΡΠΌΠΈΡΡ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΡ Π² Π²ΠΈΠ΄Π΅ QDockWidget ΠΈ Π²ΡΡΠ°Π²ΠΈΡΡ Π΅Π΅ Π² ΠΏΡΠ°Π²ΡΡ ΠΎΠ±Π»Π°ΡΡΡ ΠΊΡΠ΅ΠΏΠ»Π΅Π½ΠΈΡ:
QDockWidget *shapesDockWidget = new QDockWidget(tr("Shapes"));
shapesDockWidget->setWidget(treeWidget);
shapesDockWidget->setAllowedAreas(Qt::LeftDockWidgetArea
| Qt::RightDockWidgetArea);
addDockWidget(Qt::RightDockWidgetArea, shapesDockWidget);
Π Π²ΡΠ·ΠΎΠ²Π΅ setAllowedAreas() Π·Π°Π΄Π°ΡΡΡΡ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΊΡΠ΅ΠΏΠ»Π΅Π½ΠΈΡ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°. Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅ΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΊΠΈΠ²Π°ΡΡ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»ΡΠ΅ΠΌΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π² Π»Π΅Π²ΡΡ ΠΈΠ»ΠΈ ΠΏΡΠ°Π²ΡΡ ΠΎΠ±Π»Π°ΡΡΡ ΠΊΡΠ΅ΠΏΠ»Π΅Π½ΠΈΡ, Π³Π΄Π΅ ΠΈΠΌΠ΅Π΅ΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΏΠΎ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΠΈ Π΄Π»Ρ Π΅Π³ΠΎ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΡΠ»ΠΈ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ Π½Π΅ Π·Π°Π΄Π°ΡΡΡΡ ΡΠ²Π½ΠΎ, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅ΡΠ°ΡΠΊΠΈΠ²Π°ΡΡ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»ΡΠ΅ΠΌΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π² Π»ΡΠ±ΡΡ ΠΈΠ· ΡΠ΅ΡΡΡΠ΅Ρ ΠΎΠ±Π»Π°ΡΡΠ΅ΠΉ.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΈΠ· ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠ° QMainWindow, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΠ°Π½Π΅Π»Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ², ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ QComboBox, QSpinBox ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠ½ΠΎΠΏΠΎΠΊ QToolButton:
QToolBar *fontToolBar = new QToolBar(tr("Font"));
fontToolBar->addWidget(familyComboBox);
fontToolBar->addWidget(sizeSpinBox);
fontToolBar->addAction(boldAction);
fontToolBar->addAction(italicAction);
fontToolBar->addAction(underlineAction);
fontToolBar->setAllowedAreas(Qt::TopToolBarArea
| Qt::BottomToolBarArea);
addToolBar(fontToolBar);
ΠΡΠ»ΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ Π²ΡΠ΅Ρ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»ΡΠ΅ΠΌΡΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ² ΠΈ ΠΏΠ°Π½Π΅Π»Π΅ΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ², ΡΡΠΎΠ±Ρ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΏΡΠΈ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΏΠΎΡΡΠΈ ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄, ΠΊΠ°ΠΊ Π΄Π»Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ QSplitter, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠ»Π°ΡΡΠ° QMainWindow saveState() ΠΈ restoreState():
01 void MainWindow::writeSettings()
02 {
03 QSettings settings("Software Inc.", "Icon Editor");
04 settings.beginGroup("mainWindow");
05 settings.setValue("size", size());
06 settings.setValue("state", saveState());
07 settings.endGroup();
08 }
09 void MainWindow::readSettings()
10 {
11 QSettings settings("Software Inc.", "Icon Editor");
12 settings.beginGroup("mainWindow");
13 resize(settings.value("size").toSize());
14 restoreState(settings.value("state").toByteArray());
15 settings.endGroup();
16 }
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, QMainWindow ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎΠ΅ ΠΌΠ΅Π½Ρ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ Π²ΡΠ΅ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»ΡΠ΅ΠΌΡΠ΅ ΠΎΠΊΠ½Π° ΠΈ ΠΏΠ°Π½Π΅Π»ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ². ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠΎ ΠΌΠ΅Π½Ρ, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΊΡΡΠ²Π°ΡΡ ΠΈ Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»ΡΠ΅ΠΌΡΠ΅ ΠΎΠΊΠ½Π° ΠΈ ΠΏΠ°Π½Π΅Π»ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ².
Π ΠΈΡ. 6.15. ΠΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎΠ΅ ΠΌΠ΅Π½Ρ QMainWindow.
ΠΠ½ΠΎΠ³ΠΎΠ΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ ΡΠ°Π±ΠΎΡΡ ΡΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ Π² ΡΠ΅Π½ΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°, Π½Π°Π·ΡΠ²Π°ΡΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ Ρ ΠΌΠ½ΠΎΠ³ΠΎΠ΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ½ΡΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠΌ ΠΈΠ»ΠΈ MDIβΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ. Π Qt MDIβΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅Π½ΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅ΡΠ° ΠΊΠ»Π°ΡΡΠ° QWorkspace ΠΈ ΠΏΡΡΠ΅ΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ° Π² Π²ΠΈΠ΄Π΅ Π΄ΠΎΡΠ΅ΡΠ½Π΅Π³ΠΎ ΠΎΠΊΠ½Π° QWorkspace.