Яка різниця між QMainWindow, QWidget та QDialog?


Відповіді:


130

A QWidget- базовий клас для всіх рисувальних класів у Qt. Будь-який QWidgetклас на основі може бути показаний як вікно, показуючи його, коли у нього немає батьківського.

A QDialogзаснований наQWidget , але призначений для відображення у вікні. Він завжди відображатиметься у вікні та має функції, щоб він добре працював із загальними кнопками діалогового вікна (прийняти, відхилити тощо).

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


1
Я шукав це питання, але це насправді не відповідь, яку я чекав. У QtDesigner за допомогою QMainWindow надається рядок меню та рядок стану. Коли ви самостійно пишете код і використовуєте QMainWindow, у вас цього немає. Або ваша приказка, що ви можете зробити щось на кшталт window.addToolBar ("Панель інструментів"); і це поставить його на заздалегідь визначене місце без будь-якого іншого головного болю?
Ліліан А. Морару

1
@MoraruLilian: Я фактично не використовую QMainWindow, тому я не знаю деталей. Як я вже говорив у своїй відповіді, я знаю, що в них є місця, тому робити це в коді може бути так само просто, як ви заявляєте.
Caleb Huitt - cjhuitt

8
@Caleb_Huitt Це те, що я говорю. Я хотів просто зрозуміти, якщо ви це намагаєтесь сказати. У будь-якому разі, я б рекомендував завжди використовувати QWidget замість QMainWindow. Ви можете потрапити в проблеми, наприклад, встановивши інший макет. Якщо ви хочете встановити новий макет у QMainWindow, вам доведеться створити QWidget і встановити його як центральний віджет для QMainWin, а вже потім у QWidget ви можете встановити Layout (QLayout *). Хоча ви можете уникнути додаткових головних болів просто за допомогою QWidget. Звичайно, QMainWindow пропонує таке просте налаштування панелі інструментів і статусу, але ви можете це зробити самостійно в QWidget ...
Ліліан А. Морару

2
Однією з причин, яку ми хочемо використати QMainWindowзамість просто базового класу QWidget, QMainWindowє QDockWidgetпідтримка, тоді як QWidgetпоодинці немає
ComradeJoecool

2
@ mLstudent33 Це здається гарним питанням для документації, і якщо це не допомагає, то тут задавати як основне питання, а не в коментарях. Один приклад (для Qt5) можна побачити на doc.qt.io/qt-5/qtwidgets-mainwindows-application-example.html
Caleb Huitt - cjhuitt

4

QWidget : базовий клас для всіх інших елементів графічного інтерфейсу в модулі QtWidgets. Він може складати вікно сам по собі, або бути частиною QLayout, або просто членом ієрархії батьків-дітей.

QDialog : зазвичай використовується для здивування! - відобразити тимчасове діалогове вікно, коли потрібно ввести користувач.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.