Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«QT 4: ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ GUI Π½Π° Π‘++Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 39

Автор Жасмин Π‘Π»Π°Π½ΡˆΠ΅Ρ‚

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.