В чем разница между QMainWindow, QWidget и QDialog?

Ответы:

130

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

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

QMainWindowспроектирован с учетом общих потребностей главного окна. В нем есть предопределенные места для строки меню, строки состояния, панели инструментов и других виджетов. У него нет встроенных припусков для кнопок, как у QDialogнего.

Калеб Хайтт - cjhuitt
источник
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 предлагает такую ​​простую настройку ToolBar и StatusBar, но вы можете сделать это самостоятельно в QWidget ...
Лилиан А. Морару,
2
Одна из причин, по которой мы стремимся использовать QMainWindowвместо базового класса, QWidgetзаключается в том, что он QMainWindowимеет QDockWidgetподдержку, тогда как сам по QWidgetсебе ее нет
ComradeJoecool
2
@ mLstudent33 Звучит как хороший вопрос для документации, и, если это не поможет, задать здесь как основной вопрос, а не в комментариях. Один пример (для Qt5) можно увидеть по адресу doc.qt.io/qt-5/qtwidgets-mainwindows-application-example.html
Калеб Хуитт - cjhuitt
4

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

QDialog : обычно используется - сюрприз! - отображать временное диалоговое окно, когда требуется ввод данных пользователем.

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

Лалит кумар
источник