QMainWindow,QWidget和QDialog之间有什么区别?

156

QMainWindow、QWidget和QDialog有什么区别?

3个回答

160

QWidget是Qt中所有可绘制类的基类。任何基于QWidget的类在没有父级时都可以通过显示来显示为窗口。

QDialog基于QWidget设计为显示为窗口。它将始终以窗口形式出现,并具有使其与对话框上常见按钮(接受、拒绝等)良好配合工作的函数。

QMainWindow围绕主窗口通常需要的功能进行设计。它具有预定义的菜单栏、状态栏、工具栏和其他小部件的位置。不像QDialog那样内置按钮的允许。


1
我搜索了这个问题,但那不是我期待的答案。在QtDesigner中使用QMainWindow会给你一个菜单栏和状态栏。当你自己编写代码并使用QMainWindow时,你就没有这些东西了。或者你是说你可以做一些像window.addToolBar("Toolbar")这样的事情,它会在预定义的位置放置它而不需要其他麻烦吗? - Lilian A. Moraru
1
@MoraruLilian:我实际上不使用QMainWindow,所以我不知道具体情况。正如我在我的答案中所说,我知道它有这些地方,因此在代码中执行可能就像你所说的那样简单。 - Caleb Huitt - cjhuitt
10
@Caleb_Huitt 这就是我所说的。我只想澄清一下你是否这样表达。总之,我建议始终使用QWidget而不是QMainWindow。您可能会遇到问题,例如设置另一个布局。如果您想在QMainWindow中设置新布局,则必须创建一个QWidget并将其设置为QMainWin的中央小部件,然后在QWidget中才能设置setLayout(QLayout *)。通过使用QWidget,您可以避免额外的麻烦。当然,QMainWindow提供了工具栏和状态栏的简单设置,但您可以在QWidget中自己完成这些操作... - Lilian A. Moraru
4
我们考虑使用 QMainWindow 而不是基类 QWidget 的一个原因是,QMainWindow 支持 QDockWidget,而仅有的 QWidget 不支持。 - ComradeJoecool
如果我有一个名为calculator.ui、calculator.cpp和calculator.h的基类QMainWindow,那么派生类scientific_calculator的构造函数应该是什么样子的? - mLstudent33
2
@mLstudent33 这听起来像是一个很好的文档问题,如果文档不能解决,可以将其作为主要问题在这里提问,而不是在评论中。一个例子(适用于Qt5)可以在https://doc.qt.io/qt-5/qtwidgets-mainwindows-application-example.html中看到。 - Caleb Huitt - cjhuitt

12

QWidget: 是QtWidgets模块中所有其他GUI元素的基类。它可以单独构成一个窗口,或者是QLayout的一部分,也可以作为父子层次结构的成员。

QDialog:通常用于在需要用户输入时显示临时对话框。

QMainWindow:是一个方便的类,可用作应用程序的主窗口。它内置了一些不错的功能:状态栏、工具栏和菜单栏。


1
小部件:界面的构建块
小部件就像计算机屏幕上的乐高积木一样。它们是您与之交互的视觉元素,如按钮、滑块、输入字段等等。小部件有两个主要功能:它们在屏幕上显示信息,并允许您进行点击或输入。在Windows上,您可能会听到它们被称为“控件”。无论名称如何,小部件组成了用户可以看到和触摸的应用程序的组成部分。
Windows:小部件的容器
想象一下,窗口就像将您的小部件放在一起的框架。它们就像绘画的边框,使一切都保持在原位。窗口带有标题和轮廓,并且可以在屏幕上移动。它们就像小部件世界的老板,因为它们管理着所有东西如何配合。根据您计算机的风格(如Windows、KDE、GNOME),窗口对于外观和行为都有一定的规则。
对话框:快速信息和输入弹出窗口
对话框就像您的应用程序可以向您展示的小便签。它们是在程序想要告诉您某些内容或需要一些信息时出现的弹出窗口。对话框是临时的,通常有“确定”或“取消”等按钮。它们非常适合显示消息或提出快速问题,但不适合长时间保持打开状态。

QMainWindow:指挥中心

现在,让我们来谈谈QMainWindow。它就像是一种特殊而强大的窗口。通常它是你的应用程序的主要中心,你可以把重要的东西放在这里。QMainWindow有一个标题栏、工具栏和小部件区域。它非常适合那些需要一个集中管理所有内容的中心位置的应用程序,比如顶部的工具栏和不同部分的小部件。

总结一下,小部件是你的应用程序的乐高积木,窗口是容纳它们的框架,对话框就像便签,而QMainWindow则是你的应用程序的指挥中心。通过理解这些简单的概念,程序员可以创建既美观又易于使用的界面。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接