Что использовать с Qt для независимых окон: QDialog, QWindow или QMainWindow?

Я делаю свои первые шаги с Qt. В качестве упражнения я пишу графический интерфейс для многоядерного процессора, и отдельные ядра показаны в отдельном окне. От этого окна может быть несколько копий, со своей самостоятельной жизнью, включая меню, статусную строку и т.д. То есть они по сути как QMainWindow, но имеющие QMoreMainWindow :). Может ли быть какой-либо побочный эффект, если я использую QMainWindow несколько раз?


person katang    schedule 18.02.2016    source источник


Ответы (2)


Ничто не мешает вам использовать любой из них для чего угодно. У них разные роли и свойства:

  • QMainWindow — это просто главное окно. Он имеет панель инструментов, док-виджеты, строку меню, строку состояния и центральный виджет. Если вам не нужны все (большинство) этих вещей, вам явно не нужен QMainWindow.
  • QWindow — это базовый объект, который полезен, если вы не хотите /нужна функциональность QWidget.
  • QDialog предназначен для всплывающих окон (т. е. "диалогов "), как окно сообщений или диалоговое окно открытия файла.
  • QWidget — основное окно или элемент окна. Если сомневаетесь, используйте это.

Читая ваш вопрос, кажется, вы хотите, чтобы каждое из этих окон было QMainWindow. Примечание. На вашем месте я бы все же предпочел кастомный QWidget только с теми деталями, которые мне нужны. Добавление строки состояния и меню — это не так уж много кода.

person rubenvb    schedule 18.02.2016

несколько основных окон вообще не проблема. Я также использую их в своем приложении, и они отлично работают. Вы можете либо иметь главные окна отдельно (без родителя), либо зависеть от какого-либо главного главного окна, чтобы они закрывались при закрытии основного главного окна.

Когда ваши основные окна имеют независимые жизни и меню, строки состояния и т. д., это еще больше говорит о нескольких главных окнах, которым, вероятно, не должен быть назначен родительский элемент.

Так что, да, ваш подход кажется мне вполне приемлемым.

person IceFire    schedule 18.02.2016