ChatGPT解决这个技术问题 Extra ChatGPT

QMainWindow、QWidget和QDialog有什么区别?

QMainWindow、QWidget和QDialog有什么区别?


P
Peter Tseng

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

QDialog 基于 QWidget,但设计为显示为窗口。它总是出现在一个窗口中,并具有使其与对话框上的常用按钮(接受、拒绝等)一起工作的功能。

QMainWindow 是围绕主窗口的常见需求而设计的。它为菜单栏、状态栏、工具栏和其他小部件预定义了位置。它没有像 QDialog 这样的内置按钮。


我搜索了这个问题,但这并不是我正在等待的答案。在 QtDesigner 中使用 QMainWindow 会为您提供菜单栏和状态栏。当您自己编写代码并使用 QMainWindow 时,您没有这些东西。或者你说你可以做类似 window.addToolBar("Toolbar");它会将其放置在预定义的位置而不会引起任何其他麻烦吗?
@MoraruLilian:我实际上并没有使用QMainWindow,所以我不知道细节。正如我在回答中所说,我知道它有适合他们的地方,所以在代码中执行它可能就像你所说的那样简单。
@Caleb_Huitt 它做到了我所说的。如果这就是你想说的,我想澄清一下。无论如何,我建议总是使用 QWidget 而不是 QMainWindow。您可能会遇到问题,例如设置另一个布局。如果要在 QMainWindow 中设置新布局,则必须创建一个 QWidget 并将其设置为 QMainWin 的中央小部件,然后在 QWidget 中您可以 setLayout(QLayout *)。虽然您可以通过使用 QWidget 来避免额外的麻烦。当然,QMainWindow 提供了 ToolBar 和 StatusBar 的简单设置,但您可以在 QWidget 中自己完成...
我们希望使用 QMainWindow 而不仅仅是基类 QWidget 的一个原因是 QMainWindow 支持 QDockWidget 而单独的 QWidget 不支持
@mLstudent33 这听起来像是一个很好的文档问题,如果这没有帮助,请在此处作为主要问题而不是在评论中提问。可以在 doc.qt.io/qt-5/qtwidgets-mainwindows-application-example.html 中看到一个示例(针对 Qt5)
L
Lalit kumar

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

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

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


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅