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

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


person zibib    schedule 21.07.2010    source источник


Ответы (2)


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

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

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

person Caleb Huitt - cjhuitt    schedule 21.07.2010
comment
Я искал этот вопрос, но это не совсем тот ответ, которого я ждал. В QtDesigner использование QMainWindow дает вам строку меню и строку состояния. Когда вы сами пишете код и используете QMainWindow, у вас нет этих вещей. Или вы говорите, что можете сделать что-то вроде window.addToolBar(Toolbar); и он поместит его в заранее определенное место без какой-либо другой головной боли? - person Lilian A. Moraru; 25.10.2012
comment
@MoraruLilian: на самом деле я не использую QMainWindow, поэтому не знаю подробностей. Как я сказал в своем ответе, я знаю, что для них есть места, поэтому сделать это в коде может быть так же просто, как вы утверждаете. - person Caleb Huitt - cjhuitt; 25.10.2012
comment
@Caleb_Huitt Это делает то, что я говорю. Я хотел просто прояснить, если это то, что вы пытаетесь сказать. В любом случае, я бы рекомендовал всегда использовать QWidget вместо QMainWindow. Вы можете столкнуться с проблемами, например, с установкой другого макета. Если вы хотите установить новый макет в QMainWindow, вам нужно будет создать QWidget и установить его в качестве центрального виджета для QMainWin, а затем в QWidget вы можете установитьLayout(QLayout *). Хотя вы можете избежать дополнительных головных болей, просто используя QWidget. Конечно, QMainWindow предлагает простую настройку ToolBar и StatusBar, но вы можете сделать это самостоятельно в QWidget... - person Lilian A. Moraru; 05.11.2012
comment
Одна из причин, по которой мы хотим использовать QMainWindow вместо базового класса QWidget, заключается в том, что QMainWindow поддерживает QDockWidget, тогда как QWidget сам по себе не поддерживает. - person ComradeJoecool; 09.11.2018
comment
если у меня есть базовый класс QMainWindow с именем калькулятор.ui, калькулятор.cpp, калькулятор.h, как выглядит конструктор для производного класса научный_калькулятор? - person mLstudent33; 31.05.2020
comment
@mLstudent33 mLstudent33 Звучит как хороший вопрос для документации, и если это не поможет, задайте его здесь в качестве основного вопроса, а не в комментариях. Один пример (для Qt5) можно увидеть по адресу doc.qt. io/qt-5/qtwidgets-mainwindows-application-example.html - person Caleb Huitt - cjhuitt; 01.06.2020

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

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

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

person Lalit kumar    schedule 10.11.2019