【学习笔记】QT从入门到实战完整版(菜单栏、工具栏、浮动窗口、状态栏、中心部件)(3)

QMainWindow

QMainWindow 是一个为用户提供主窗口程序的类,包含以下几种类型部件,是许多应用程序的基础。

示例代码


void MainWindow::test()
{
    // ----------------------------------- 菜单栏(只能有一个)-----------------------------------
    QMenuBar *menuBar = this->menuBar();
    this->setMenuBar(menuBar);  // 将菜单栏设置到窗口中   这里是 set 开头表示只能有一个

    // 增加菜单
    QMenu *fileMenu = menuBar->addMenu("文件");
    QMenu *editMenu = menuBar->addMenu("编辑");

    // 增加子菜单
    QAction *fileMenuAction = fileMenu->addAction("新建");
    QAction *openMenuAction = fileMenu->addAction("打开");
    fileMenu->addSeparator();  // 增加分隔线
    QAction *closeMenuAction = fileMenu->addAction("关闭");
    QAction *printMenuAction = fileMenu->addAction("打印");

    // 为每个子菜单设置信号槽
    connect(fileMenuAction, &QAction::triggered, []{
       qDebug() << "点击了菜单栏: 新建";
    });

    connect(openMenuAction, &QAction::triggered, []{
       qDebug() << "点击了菜单栏: 打开";
    });

    connect(closeMenuAction, &QAction::triggered, []{
       qDebug() << "点击了菜单栏: 关闭";
    });

    connect(printMenuAction, &QAction::triggered, []{
       qDebug() << "点击了菜单栏: 打印";
    });


    // ----------------------------------- 增加工具栏(可以有多个)-----------------------------------
    QToolBar *toolBar = new QToolBar("工具栏", this);
    this->addToolBar(Qt::RightToolBarArea, toolBar); // 将工具栏加入到窗口中, 并设置默认向左停靠, 这里是 add 开头表示可以有多个
    toolBar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);    // 只允许左右停靠
    toolBar->setFloatable(false);   // 禁止浮动
    //toolBar->setMovable(false);   // 禁止移动(总开关, 不允许停靠\不允许浮动\不允许拖拽)

    // 可以增加已有的菜单
    toolBar->addAction(fileMenuAction);     // 选择菜单栏里面的 ‘新建’ 菜单 (不能再定义 QAction * 来接收返回值)
    toolBar->addAction(openMenuAction);     // 选择菜单栏里面的 ‘编辑’ 菜单 (不能再定义 QAction * 来接收返回值)
    toolBar->addSeparator();

    // 也可以新增自定义的菜单
    QAction *selToolAction = toolBar->addAction("选择");
    QAction *fselToolAction = toolBar->addAction("反选");
    toolBar->addSeparator();            // 增加分隔线

    // 也可以增加控件
    QPushButton *btn = new QPushButton("按钮", this);
    toolBar->addWidget(btn);

    // 为每个子菜单设置信号槽
    connect(selToolAction, &QAction::triggered, []{
       qDebug() << "点击了工具栏: 选择";
    });

    connect(fselToolAction, &QAction::triggered, []{
       qDebug() << "点击了工具栏: 反选";
    });

    connect(btn, &QPushButton::clicked, []{
       qDebug() << "点击了工具栏: 按钮";
    });


    // ----------------------------------- 状态栏(只能有一个) -----------------------------------
    QStatusBar *stBar = statusBar();
    this->setStatusBar(stBar);           // 将状态栏设置到窗口中   这里是 set 开头表示只能有一个

    QLabel *labelTs = new QLabel("提示消息", this);
    QLabel *labelSt = new QLabel("状态信息", this);
    stBar->addWidget(labelTs);          // 增加标签
    stBar->addPermanentWidget(labelSt); // 在右边增加标签


    // ----------------------------------- 中心部件(只能有一个)-----------------------------------
    QTextEdit *textEdit = new QTextEdit(this);
    this->setCentralWidget(textEdit);  // 将中心部件设置到窗口中   这里是 set 开头表示只能有一个


    // ----------------------------------- 浮动窗口(可以有多个)-----------------------------------
    QDockWidget *dockWidget = new QDockWidget("浮动窗口", this);
    this->addDockWidget(Qt::BottomDockWidgetArea, dockWidget);  // 将浮动窗口加入到窗口中, 并设置默认向底停靠, 这里是 add 开头表示可以有多个
    dockWidget->setAllowedAreas(Qt::BottomDockWidgetArea | Qt::TopDockWidgetArea); // 设置只能向顶部或底部停靠

}

实现效果

触发效果

点击了菜单栏: 新建
点击了菜单栏: 打开
点击了菜单栏: 关闭
点击了菜单栏: 打印
点击了菜单栏: 新建
点击了菜单栏: 打开
点击了工具栏: 选择
点击了工具栏: 反选
点击了工具栏: 按钮

不得不吐槽

想把 QT 打包成单文件可执行程序,没想到居然会有那么大,想想也释然。主要是 QT 程序依赖的库太多了,而微软的 MFC 因为很多依赖库系统自带,所以不需要连依赖库都打包。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值