QMainWindow,QWidget和QDialog有什么区别?


Answers:


129

A QWidget是Qt中所有可绘制类的基类。任何QWidget基于类的类都可以在没有父类的情况下显示为窗口。

A QDialog基于QWidget,但设计为显示为窗口。它将始终显示在窗口中,并具有使其与对话框上的常用按钮(接受,拒绝等)配合使用的功能。

QMainWindow是围绕主窗口的常见需求而设计的。它具有用于菜单栏,状态栏,工具栏和其他小部件的预定义位置。像按钮一样QDialog,它没有任何内置的按钮余量。


1
我搜索了这个问题,但这并不是我一直在等待的答案。在QtDesigner中,使用QMainWindow为您提供菜单栏和状态栏。当您自己编写代码并使用QMainWindow时,您就没有了。或您所说的可以做诸如window.addToolBar(“ Toolbar”);之类的事情。它将放置在预定义的位置而不会引起其他麻烦?
莉莲·莫拉鲁

1
@MoraruLilian:我实际上没有使用QMainWindow,所以我不知道细节。正如我在回答中所说的,我知道它为他们提供了位置,因此在代码中进行操作可能像您声明的那样简单。
Caleb Huitt-cjhuitt 2012年

8
@Caleb_Huitt它就是我所说的。我只是想弄清楚这是否是您要说的话。无论如何,我建议始终使用QWidget而不是QMainWindow。您可能会遇到问题,例如,设置另一个布局。如果要在QMainWindow中设置新的布局,则必须创建一个QWidget并将其设置为QMainWin的中央窗口小部件,然后在QWidget中可以设置setLayout(QLayout *)。虽然仅使用QWidget就可以避免其他麻烦。当然,QMainWindow可以轻松设置ToolBar和StatusBar,但您可以在QWidget中自己进行设置...
Lilian A. Moraru 2012年

2
我们寻求使用QMainWindow而不是仅使用基类的原因之一QWidgetQMainWindowQDockWidget支持,而QWidget单独没有支持
同志Joecool

2
@ mLstudent33对于文档来说,这听起来像是一个好问题,如果还是无济于事,则可以在此处作为主要问题而不是在评论中提问。可以在doc.qt.io/qt-5/qtwidgets-mainwindows-application-example.html
Caleb Huitt-cjhuitt

4

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

QDialog:通常用于-惊喜!-需要用户输入时显示一个临时对话框。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.