QT中QMainWindow、QWidget、QDialog的区别

QT中QMainWindow、QWidget、QDialog的区别

QMainWindow

详细描述

QMainWindow类提供一个有菜单条、锚接窗口(例如工具条)和一个状态条的主应用程序窗口。

主窗口通常用在提供一个大的中央窗口部件(例如文本编辑或者绘制画布)以及周围菜单、工具条和一个状态条。QMainWindow常常被继承,因为这使得封装中央部件、菜单和工具条以及窗口状态变得更容易。继承使创建当用户点击菜单项或者工具条按钮时被调用的槽成为可能。你也可以使用Qt设计器来创建主窗口。我们将简要地回顾一下有关添加菜单项和工具条按钮,然后描述QMainWindow自己的便捷。

   QMainWindow *mw = new QMainWindow;
    QTextEdit *edit = new QTextEdit( mw, "editor" );
    edit->setFocus();
    mw->setCaption( "Main Window" );
    mw->setCentralWidget( edit );
    mw->show();

QMainWindow可以像上面那样显示地来被创建。中央窗口部件是通过setCentralWidget()设置地。弹出菜单可以被添加到默认工具条,窗口部件可以被添加到状态条,工具条和锚接窗口可以被添加到任何一个锚接区域。


        ApplicationWindow * mw = new ApplicationWindow();
        mw->setCaption( "Qt Example - Application" );
        mw->show();

上面代码中的ApplicationWindow是我们自己写的QMainWindow的子类,这是一个使用QMainWindow的常用方法。(源代码取自application/main.cpp、application/application.cpp、action/main.cpp和action/application.cpp。)

在继承的时候,我们在子类的构造函数中添加菜单项和工具条。如果我们已经直接创建了一个QMainWindow实例,我们可以很容易地通过传递QMainWindow实例代替作为父对象的this指针来添加菜单项和工具条。

        QPopupMenu * help = new QPopupMenu( this );
        menuBar()->insertItem( "&Help", help );
        help->insertItem( "&About", this, SLOT(about()), Key_F1 );
 这里写代码片们添加了有一个菜单项的新菜单。这个菜单已经被插入QMainWindow默认提供的并且可以通过menuBar()函数访问的菜单条。当这个菜单项被点击时,这个槽被调用。
QToolBar * fileTools = new QToolBar( this, "file operations" );
        fileTools->setLabel( "File Operations" );
        QToolButton * fileOpen
            = new QToolButton( openIcon, "Open File", QString::null,
                               this, SLOT(choose()), fileTools, "open file" );

这部分提取显示的是有一个工具条按钮的工具条的创建。QMainWindow为工具条提供了四个锚接区域。当一个工具条被作为QMainWindow(或者继承类)实例 的子对象被创建时,它将会被放置到一个锚接区域中(默认是Top锚接区域)。当这个工具条按钮被点击时,这个槽被调用。任何锚接窗口可以使用addDockWindow(),或者通过把QMainWindow作为父对象来创建的方法来被添加到一个锚接区域中。

e = new QTextEdit( 
### QtQMainWindowQWidget QDialog区别 #### QWidget 类概述 `QWidget` 是所有用户界面对象的基础类[^2]。这个类本身并不执行太多直接操作;相反,它为许多继承自 `QWidget` 的子类提供了基础结构支持功能,如 `QLabel`、`QPushButton` 或者 `QCheckBox`。 #### QMainWindow 特点 `QMainWindow` 提供了一个主要应用程序窗口框架,适用于构建复杂的应用程序界面。此类包含了菜单栏、工具条以及状态栏的支持,并允许开发者创建多文档接口 (MDI) 应用程序。因此,在设计需要这些组件的标准桌面应用时通常会选择使用 `QMainWindow`[^1]。 ```cpp // 创建一个带有菜单栏状态栏的主窗口实例 #include <QApplication> #include <QMainWindow> int main(int argc, char *argv[]) { QApplication app(argc, argv); QMainWindow window; window.setWindowTitle("Main Window Example"); window.resize(800, 600); // 添加菜单栏其他部件... window.show(); return app.exec(); } ``` #### QDialog 功能描述 作为顶级窗口的一种形式,`QDialog` 主要用于实现短期任务或与用户的短暂交流过程中的交互逻辑。它可以被配置成模态(阻止其他窗口接收输入)或是非模态模式运行。此外,对话框还可以定义标准按钮并处理其点击事件来获取用户反馈。对于一些简单的数据收集或者确认提示来说非常合适[^3]。 ```cpp // 显示一个简单消息对话框的例子 #include <QMessageBox> void showMessage(const QString &messageText) { QMessageBox msgBox; msgBox.setText(messageText); msgBox.exec(); // 这里会阻塞直到关闭对话框 } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值