Прикріплюються віджети і панелі інструментів - qt 4 програмування gui на з

Прикріплюються віджети і панелі інструментів

Прикріплюваними є віджети, які можуть кріпитися до певних областях головного вікна програми QMainWindow або бути незалежними «плаваючими» вікнами. QMainWindow має чотири області кріплення таких віджетів: одна зверху, одна знизу, одна зліва і одна справа від центрального віджета. У таких додатках, як Microsoft Visual Studio і Qt Linguist, широко використовуються прикріплюються вікна для забезпечення дуже гнучкого інтерфейсу користувача. В Qt прикріплюються віджети є екземпляри класу QDockWidget.

Кожен прикріплюється віджет має свій власний заголовок, навіть коли він прикріплений. Користувачі можуть переміщувати прикріплюються вікна з одного місця кріплення на інше, пересуваючи смугу заголовка. Вони можуть також від'єднувати прикріплюється вікно від області кріплення і зробити його незалежним плаваючим вікном, розташовуючи прикріплюється вікно поза областей кріплення. Вільні плаваючі прикріплюються вікна завжди знаходяться «поверх» їх головного вікна. Користувачі можуть закрити QDockWidget, клацаючи по кнопці закриття, розташованої в заголовку віджета. Будь-які комбінації цих можливостей можна відключати за допомогою виклику QDockWidget :: setFeatures ().

Прикріплюються віджети і панелі інструментів - qt 4 програмування gui на з

Мал. 6.13. QMainWindow з прикріпленим віджетом.

У ранніх версіях Qt панелі інструментів розглядалися як прикріплюються віджети, які використовують ті ж самі області кріплення. Починаючи з Qt 4 панелі інструментів розміщуються в своїх галузях, розташованих по периметру центрального віджета (як показано на рис. 6.14), і вони не можуть відкріплює. Якщо потрібно мати плаваючу панель інструментів, можна просто помістити її всередину QDockWindow.

Прикріплюються віджети і панелі інструментів - qt 4 програмування gui на з

Мал. 6.14. Області кріплення віджетів і області панелей інструментів QMainWindow.

Кути, позначені пунктирними лініями, можуть належати обом сусіднім областям кріплення. Наприклад, ми могли б верхній лівий кут призначити лівій області кріплення за допомогою виклику QMainWindow :: setCorner (Qt :: TopLeftCorner, Qt :: LeftDockWidgetArea).

Наступний фрагмент програмного коду показує, як для існуючого віджета (в даному випадку для QTreeWidget) можна оформити оболонку у вигляді QDockWidget і вставити її в праву область кріплення:

QDockWidget * shapesDockWidget = new QDockWidget (tr ( "Shapes"));

У виклику setAllowedAreas () задаються допустимі області кріплення прикріплюватися вікна. У нашому випадку ми дозволяємо користувачу перетягувати прикріплюється вікно тільки в ліву чи праву область кріплення, де є достатньо простору по вертикалі для його нормального відображення. Якщо допустимі області не задаються явно, користувач може перетягувати прикріплюється вікно в будь-яку з чотирьох областей.

Нижче наводиться фрагмент з конструктора підкласу QMainWindow, який показує, як можна створювати панель інструментів, що містить QComboBox, QSpinBox і кілька кнопок QToolButton:

QToolBar * fontToolBar = new QToolBar (tr ( "Font"));

Якщо ми хочемо зберігати позиції всіх прикріплюються віджетів і панелей інструментів, щоб мати можливість їх відновлення при наступному запуску програми, ми можемо написати майже такий же програмний код, як для збереження стану роздільник QSplitter, використовуючи функції класу QMainWindow saveState () і restoreState ():

01 void MainWindow :: writeSettings ()

03 QSettings settings ( "Software Inc.", "Icon Editor");

05 settings.setValue ( "size", size ());

06 settings.setValue ( "state", saveState ());

09 void MainWindow :: readSettings ()

11 QSettings settings ( "Software Inc.", "Icon Editor");

Нарешті, QMainWindow забезпечує контекстне меню, в якому представлені всі прикріплюються вікна і панелі інструментів. Використовуючи це меню, користувач може закривати і відновлювати прикріплюються вікна і панелі інструментів.

Мал. 6.15. Контекстне меню QMainWindow.