Чем отличается qwidget от qmainwindow
Перейти к содержимому

Чем отличается qwidget от qmainwindow

What's the difference between QMainWindow, QWidget and QDialog?

What’s the difference between QMainWindow, QWidget and QDialog?

2 Answers 2

A QWidget is the base class for all drawable classes in Qt. Any QWidget -based class can be shown as a window by showing it when it has no parent.

A QDialog is based on QWidget , but designed to be shown as a window. It will always appear in a window, and has functions to make it work well with common buttons on dialogs (accept, reject, etc.).

QMainWindow is designed around common needs for a main window to have. It has predefined places for a menu bar, a status bar, a toolbar, and other widgets. It does not have any built-in allowances for buttons like QDialog does.

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

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

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

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

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

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

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

QMainWindow против QWidget

Я не могу найти хороших объяснений различного использования QMainWindow и QWidget в PyQt5 (и Qt в целом, я думаю). Из того, что я читал, QMainWindow наследуется от QWidget, поэтому должен иметь возможность делать все, что может QWidget, и даже больше. Но когда я пытаюсь преобразовать пример, который я нашел из QWidget, в QMainWindow, компоновка оказывается испорченной.

Пример, который я пытаюсь отработать, взят из https://www.tutorialspoint.com/pyqt/pyqt_qstackedwidget.htm. (Мой графический интерфейс будет иметь StackedWidget в качестве центрального виджета с боковой панелью для навигации, поэтому использование этого примера в QMainWidget будет отличной основой для моего собственного кода.)

PyQT5-преобразованная и немного укороченная версия:

Этот код работал нормально, пока был основан на QWidget, но когда он основан на QMainWidget (как в приведенной выше версии), все втиснуто в верхний левый угол.

Какие изменения необходимы, чтобы показать макет, который работает для QWidget в QMainWindow?

В QMainWindow вы должны установить центральный виджет с setCentralWidget (или чем-то подобным)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *