【Qt教程06】Qt中的基础窗口类3——QMainWindow


原创作者:郑同学的笔记
原创地址:https://zhengjunxue.blog.csdn.net/article/details/137113081
qq技术交流群:921273910

  • 在Qt中,QMainWindow 是一个用于创建应用程序主窗口的重要类。它提供了一种基本的应用程序框架,包括菜单栏、工具栏、状态栏以及可停靠的窗口部件等功能。通过继承 QMainWindow 类,可以方便地创建自定义的主窗口,并添加各种用户界面元素。

一、简介

QMainWindow是标准基础窗口中结构最复杂的窗口, 其组成如下:

  • 提供了菜单栏, 工具栏, 状态栏, 停靠窗口
  • 菜单栏: 只能有一个, 位于窗口的最上方
  • 工具栏: 可以有多个, 默认提供了一个, 窗口的上下左右都可以停靠
  • 状态栏: 只能有一个, 位于窗口最下方
  • 停靠窗口: 可以有多个, 默认没有提供, 窗口的上下左右都可以停靠

在这里插入图片描述

二、相关函数

1、菜单栏

菜单栏是主窗口顶部的一组菜单项,通常用于提供应用程序的主要功能入口。使用 menuBar() 函数可以获取菜单栏的指针,并通过 addMenu() 函数添加菜单。

通过代码的方式添加菜单或者菜单项

// 给菜单栏添加菜单
QAction *QMenuBar::addMenu(QMenu *menu);
QMenu *QMenuBar::addMenu(const QString &title);
QMenu *QMenuBar::addMenu(const QIcon &icon, const QString &title);

// 给菜单对象添加菜单项(QAction)
QAction *QMenu::addAction(const QString &text);
QAction *QMenu::addAction(const QIcon &icon, const QString &text);

// 添加分割线
QAction *QMenu::addSeparator();

菜单项 QAction 事件的处理

单击菜单项, 该对象会发出一个信号

// 点击QAction对象发出该信号
[signal] void QAction::triggered(bool checked = false);

2、工具栏

工具栏通常位于主窗口的顶部或侧边,提供了一组常用工具按钮,便于用户快速访问常用功能。使用 addToolBar() 函数可以添加工具栏,并向其中添加按钮。

不通过UI界面直接操作,那么就需要调用相关的API函数了

// 在QMainWindow窗口中添加工具栏
void QMainWindow::addToolBar(Qt::ToolBarArea area, QToolBar *toolbar);
void QMainWindow::addToolBar(QToolBar *toolbar);
QToolBar *QMainWindow::addToolBar(const QString &title);

// 将Qt控件放到工具栏中
// 工具栏类: QToolBar
// 添加的对象只要是QWidget或者启子类都可以被添加
QAction *QToolBar::addWidget(QWidget *widget);

// 添加QAction对象
QAction *QToolBar::addAction(const QString &text);
QAction *QToolBar::addAction(const QIcon &icon, const QString &text);

// 添加分隔线
QAction *QToolBar::addSeparator()

3、 状态栏

状态栏位于主窗口底部,用于显示应用程序的状态信息或其他提示。使用 statusBar() 函数可以获取状态栏的指针,然后通过设置文本内容来更新状态栏的显示信息。

一般情况下, 需要在状态栏中添加某些控件, 显示某些属性, 使用最多的就是添加标签 QLabel

// 类型: QStatusBar
void QStatusBar::addWidget(QWidget *widget, int stretch = 0);

[slot] void QStatusBar::clearMessage();
[slot] void QStatusBar::showMessage(const QString &message, int timeout = 0);

4、停靠窗口

停靠窗口是可以随主窗口一起移动和调整大小的窗口,通常用于显示辅助信息或工具。使用 addDockWidget() 函数可以将停靠窗口添加到主窗口的指定位置,同时使用 setCentralWidget() 函数可以设置主窗口的中心部件,通常是用户界面的主要内容。

停靠窗口可以通过鼠标拖动停靠到窗口的上、下、左、右,或者浮动在窗口上方。如果需要这种类型的窗口必须手动添加,如果在非QMainWindow类型的窗口中添加了停靠窗口, 那么这个窗口是不能移动和浮动的。

三、demo

cpp
#include <QtWidgets>

class MyMainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MyMainWindow()
    {
        // 标题
        setWindowTitle("Qt Demo");

        // 菜单栏
        QMenuBar *menuBar = new QMenuBar(this);
        setMenuBar(menuBar);

        QMenu *fileMenu = menuBar->addMenu("File");
        QAction *newAction = fileMenu->addAction("New");
        connect(newAction, &QAction::triggered, this, &MyMainWindow::onNew);

        QMenu *editMenu = menuBar->addMenu("Edit");
        editMenu->addAction("Cut");
        editMenu->addAction("Copy");
        editMenu->addAction("Paste");

        QMenu *viewMenu = menuBar->addMenu("View");
        viewMenu->addAction("Zoom In");
        viewMenu->addAction("Zoom Out");

        // 工具栏
        QToolBar *toolBar1 = addToolBar("Tool1");
        QAction *action1 = toolBar1->addAction("Action1");
        connect(action1, &QAction::triggered, this, &MyMainWindow::onAction1);

        QToolBar *toolBar2 = addToolBar("Tool2");
        toolBar2->addAction("Action3");
        toolBar2->addAction("Action4");

        QToolBar *toolBar3 = addToolBar("Tool3");
        toolBar3->addAction("Action5");
        toolBar3->addAction("Action6");

        // 状态栏
        QStatusBar *statusBar = new QStatusBar(this);
        setStatusBar(statusBar);
        statusBar->showMessage("Ready");

        // 核心窗口
        QTextEdit *centralWidget = new QTextEdit(this);
        setCentralWidget(centralWidget);

        // 停靠窗口
        QDockWidget *dockWidget = new QDockWidget("Dock", this);
        dockWidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
        QTextEdit *dockContent = new QTextEdit(dockWidget);
        dockWidget->setWidget(dockContent);
        addDockWidget(Qt::RightDockWidgetArea, dockWidget);
    }

public slots:
    void onNew()
    {
        QMessageBox::information(this, "New Action", "New action triggered!");
    }

    void onAction1()
    {
        QMessageBox::information(this, "Action1", "Action1 triggered!");
    }
};

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    MyMainWindow mainWindow;
    mainWindow.show();

    return app.exec();
}

#include "main.moc"

运行结果如下图所示
在这里插入图片描述
参考
1.爱编程的大丙——Qt 教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郑同学的笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值