Qt 第29课、主窗口中的状态栏
创始人
2025-05-28 09:02:02

1、主窗口中的状态栏

  • 状态栏的概念和意义
    — 状态栏是应用程序中输出简要信息的区域
    — 状态栏一般位于主窗口的最底部
    — 状态栏的消息类型
     实时消息:如(当前程序状态)
     永久消息:如(程序版本号,机构名称)
     进度消息:如(进度条提示,百分比提示)
  • 在 Qt 中提供与状态栏相关的类组件
    在这里插入图片描述
  • 在 Qt 主窗口中创建状态栏
    在这里插入图片描述
  • Qt 状态栏的设计原则
    左边的区域用于输出实时消息
    右边的区域用于设置永久消息
    addWidget 在状态栏的左半部分添加组件
    addPermanentWidget 在状态栏的右半部分添加组件

状态栏初体验:

MainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();
};
#endif // MAINWINDOW_H

MainWindow.cpp

#include "MainWindow.h"#include 
#include 
#include 
#include MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{QStatusBar* sb = statusBar();QLabel* label = new QLabel("label");QLineEdit* edit = new QLineEdit("edit");QPushButton* btn = new QPushButton("btn");sb->addPermanentWidget(label);sb->addPermanentWidget(edit);sb->addPermanentWidget(btn);sb->showMessage("xiebs");}MainWindow::~MainWindow()
{
}

main.cpp

#include "MainWindow.h"#include int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}

在这里插入图片描述
记事本程序:

MainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include class MainWindow : public QMainWindow
{Q_OBJECT
private:MainWindow();MainWindow(const MainWindow& obj);MainWindow& operator= (const MainWindow& obj);bool construct();bool initMenuBar();bool initToolBar();bool initStatusBar();bool initFileMenu(QMenuBar* mb);bool initEditMenu(QMenuBar* mb);bool initFormatMenu(QMenuBar* mb);bool initViewMenu(QMenuBar* mb);bool initHelpMenu(QMenuBar* mb);bool initFileToolItem(QToolBar* tb);bool initEditToolItem(QToolBar* tb);bool initFormatToolItem(QToolBar* tb);bool initViewToolItem(QToolBar* tb);bool makeAction(QAction*& action, QString str, int key);bool makeAction(QAction*& action, QString tip, QString res);public:static MainWindow* NewInstance();~MainWindow();
};
#endif // MAINWINDOW_H

MainWindow.cpp

#include "MainWindow.h"
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include MainWindow::MainWindow(): QMainWindow()
{}bool MainWindow::construct()
{bool ret = true;ret = ret && initMenuBar();ret = ret && initToolBar();ret = ret && initStatusBar();return ret;
}MainWindow* MainWindow::NewInstance()
{MainWindow* ret = new MainWindow();if(!(ret && ret->construct())){delete ret;ret = nullptr;}return ret;
}bool MainWindow::initMenuBar()
{bool ret = true;QMenuBar* mb = menuBar();if(mb != nullptr){ret = ret && initFileMenu(mb);ret = ret && initEditMenu(mb);ret = ret && initFormatMenu(mb);ret = ret && initViewMenu(mb);ret = ret && initHelpMenu(mb);}else{ret = false;}return ret;
}bool MainWindow::initToolBar()
{bool ret = true;QToolBar* tb = addToolBar("ToolBar");tb->setFloatable(false);tb->setMovable(false);tb->setIconSize(QSize(16, 16));ret = ret && initFileToolItem(tb);tb->addSeparator();ret = ret && initEditToolItem(tb);tb->addSeparator();ret = ret && initFormatToolItem(tb);tb->addSeparator();ret = ret && initViewToolItem(tb);return ret;
}bool MainWindow::initStatusBar()
{bool ret = true;QStatusBar* sb = statusBar();QLabel* label = new QLabel("D.T.software");if(label != nullptr){sb->addPermanentWidget(label);label->setMinimumWidth(40);label->setAlignment(Qt::AlignCenter);}else{ret = false;}return ret;
}bool MainWindow::initFileMenu(QMenuBar* mb)
{QMenu* menu = new QMenu("File(&F)", nullptr);bool ret = (menu != nullptr);if(ret){QAction* action = nullptr;ret = ret && makeAction(action, "New(&N)", Qt::CTRL + Qt::Key_N);if(ret){menu->addAction(action);}menu->addSeparator();ret = ret && makeAction(action, "Open(&O)", Qt::CTRL + Qt::Key_O);if(ret){menu->addAction(action);}menu->addSeparator();ret = ret && makeAction(action, "Save(&N)", Qt::CTRL + Qt::Key_S);if(ret){menu->addAction(action);}menu->addSeparator();ret = ret && makeAction(action, "Save As(&A)", Qt::CTRL + Qt::SHIFT + Qt::Key_S);if(ret){menu->addAction(action);}menu->addSeparator();ret = ret && makeAction(action, "Print(&P)", Qt::CTRL + Qt::Key_P);if(ret){menu->addAction(action);}menu->addSeparator();ret = ret && makeAction(action, "Exit(&X)", 0);if(ret){menu->addAction(action);}menu->addSeparator();}if(ret){mb->addMenu(menu);}else{delete menu;}return ret;
}bool MainWindow::initEditMenu(QMenuBar* mb)
{QMenu* menu = new QMenu("Edit(&E)", nullptr);bool ret = (menu != nullptr);if(ret){QAction* action = nullptr;ret = ret && makeAction(action, "Undo(&U)", Qt::CTRL + Qt::Key_Z);if(ret){menu->addAction(action);}menu->addSeparator();ret = ret && makeAction(action, "Redo(&R)", Qt::CTRL + Qt::Key_Y);if(ret){menu->addAction(action);}menu->addSeparator();ret = ret && makeAction(action, "Cut(&T)", Qt::CTRL + Qt::Key_X);if(ret){menu->addAction(action);}menu->addSeparator();ret = ret && makeAction(action, "Copy(&C)", Qt::CTRL + Qt::Key_C);if(ret){menu->addAction(action);}menu->addSeparator();ret = ret && makeAction(action, "Paste(&P)", Qt::CTRL + Qt::Key_V);if(ret){menu->addAction(action);}menu->addSeparator();ret = ret && makeAction(action, "Delete(&L)", Qt::Key_Delete);if(ret){menu->addAction(action);}menu->addSeparator();ret = ret && makeAction(action, "Find(&F)", Qt::CTRL + Qt::Key_F);if(ret){menu->addAction(action);}menu->addSeparator();ret = ret && makeAction(action, "Replace(&R)", Qt::CTRL + Qt::Key_H);if(ret){menu->addAction(action);}menu->addSeparator();ret = ret && makeAction(action, "Goto(&G)", Qt::CTRL + Qt::Key_G);if(ret){menu->addAction(action);}menu->addSeparator();ret = ret && makeAction(action, "Select All(&A)", Qt::CTRL + Qt::Key_A);if(ret){menu->addAction(action);}menu->addSeparator();}if(ret){mb->addMenu(menu);}else{delete menu;}return ret;
}bool MainWindow::initFormatMenu(QMenuBar* mb)
{QMenu* menu = new QMenu("Format(&O)", nullptr);bool ret = (menu != nullptr);if(ret){QAction* action = nullptr;ret = ret && makeAction(action, "AutoWrap(&W)", 0);if(ret){menu->addAction(action);}menu->addSeparator();ret = ret && makeAction(action, "Font(&F)", 0);if(ret){menu->addAction(action);}menu->addSeparator();}if(ret){mb->addMenu(menu);}else{delete menu;}return ret;
}bool MainWindow::initViewMenu(QMenuBar* mb)
{QMenu* menu = new QMenu("View(&V)", nullptr);bool ret = (menu != nullptr);if(ret){QAction* action = nullptr;ret = ret && makeAction(action, "ToolBar(&T)", 0);if(ret){menu->addAction(action);}menu->addSeparator();ret = ret && makeAction(action, "StatusBar(&S)", 0);if(ret){menu->addAction(action);}menu->addSeparator();}if(ret){mb->addMenu(menu);}else{delete menu;}return ret;
}bool MainWindow::initHelpMenu(QMenuBar* mb)
{QMenu* menu = new QMenu("Help(&H)", nullptr);bool ret = (menu != nullptr);if(ret){QAction* action = nullptr;ret = ret && makeAction(action, "User Manual", 0);if(ret){menu->addAction(action);}menu->addSeparator();ret = ret && makeAction(action, "About NotePad...", 0);if(ret){menu->addAction(action);}menu->addSeparator();}if(ret){mb->addMenu(menu);}else{delete menu;}return ret;
}bool MainWindow::initFileToolItem(QToolBar* tb)
{bool ret = true;QAction* action = nullptr;ret = ret && makeAction(action, "New", ":/res/pic/new.png");if(ret){tb->addAction(action);}ret = ret && makeAction(action, "Open", ":/res/pic/open.png");if(ret){tb->addAction(action);}ret = ret && makeAction(action, "Save", ":/res/pic/save.png");if(ret){tb->addAction(action);}ret = ret && makeAction(action, "Save as", ":/res/pic/saveas.png");if(ret){tb->addAction(action);}ret = ret && makeAction(action, "Print", ":/res/pic/print.png");if(ret){tb->addAction(action);}return ret;
}bool MainWindow::initEditToolItem(QToolBar* tb)
{bool ret = true;QAction* action = nullptr;ret = ret && makeAction(action, "Undo", ":/res/pic/undo.png");if(ret){tb->addAction(action);}ret = ret && makeAction(action, "Redo", ":/res/pic/redo.png");if(ret){tb->addAction(action);}ret = ret && makeAction(action, "Cut", ":/res/pic/cut.png");if(ret){tb->addAction(action);}ret = ret && makeAction(action, "Copy", ":/res/pic/copy.png");if(ret){tb->addAction(action);}ret = ret && makeAction(action, "Paste", ":/res/pic/paste.png");if(ret){tb->addAction(action);}ret = ret && makeAction(action, "Find", ":/res/pic/find.png");if(ret){tb->addAction(action);}ret = ret && makeAction(action, "Replace", ":/res/pic/replace.png");if(ret){tb->addAction(action);}ret = ret && makeAction(action, "Goto", ":/res/pic/goto.png");if(ret){tb->addAction(action);}return ret;
}bool MainWindow::initFormatToolItem(QToolBar* tb)
{bool ret = true;QAction* action = nullptr;ret = ret && makeAction(action, "Wrap", ":/res/pic/wrap.png");if(ret){tb->addAction(action);}ret = ret && makeAction(action, "Font", ":/res/pic/font.png");if(ret){tb->addAction(action);}return ret;
}bool MainWindow::initViewToolItem(QToolBar* tb)
{bool ret = true;QAction* action = nullptr;ret = ret && makeAction(action, "Tool", ":/res/pic/tool.png");if(ret){tb->addAction(action);}ret = ret && makeAction(action, "Status", ":/res/pic/status.png");if(ret){tb->addAction(action);}return ret;
}bool MainWindow::makeAction(QAction*& action, QString str, int key)
{bool ret = true;action = new QAction(str, nullptr);if(action != nullptr){action->setShortcut(QKeySequence(key));}else{ret = false;}return ret;
}bool MainWindow::makeAction(QAction*& action, QString tip, QString res)
{bool ret = true;action = new QAction("", nullptr);if(action != nullptr){action->setToolTip(tip);action->setIcon(QIcon(res));}else{ret = false;}return ret;
}MainWindow::~MainWindow()
{}

main.cpp

#include "MainWindow.h"#include int main(int argc, char *argv[])
{QApplication a(argc, argv);int ret = 0;MainWindow* w = MainWindow::NewInstance();if(w != nullptr){w->show();ret = a.exec();}delete w;return ret;
}

在这里插入图片描述

  • 小结:
    — 状态栏是程序中输出简要信息的区域
    QStatusBar 是 Qt 中创建状态栏组件的类
    QStatusBar 中可以添加任意的QWidget
    QStatusBar 有自己内置的设计原则
    QStatusBar 可以定制出各种形式的状态栏

相关内容

热门资讯

【Java闭关修炼】Sprin... # 配置Mysql与注册登录模块应用服务模型IDEA 连接数据库点击IDEA右侧的database ...
Oracle 常见报错问题汇总 Oracle 常见报错问题汇总 报错:ORA-01017: invalid username/pas...
计算不规则区域的周长和面积——... 1.题目描述 设计求不规则区域周长和面积计算的算法。 测试数据的获得: 输入样例&#x...
STM32之IIC IIC协议IIC全称Inter-Integrated Circuit (集成电路总线),...
Vue3 使用MD5加密(清晰... 概述 最近在想做个cloud项目,gitee上找了个模板项目,前端使用到vue3 &#...
使用Idea编译Nacos源码... 其实nacos下载下来启动就可以了,但是为了方便一些,而且Nacos在GitHub上下载是真的慢,可...
【abp Vnext】下载并运... 软件环境:电脑需要基础软件环境node.js、npm,这些网上教程很多&...
一文了解|氢燃料电池行业痛点问... 早在1839年的英国,一位名叫威廉格罗夫的科学家,就已发明了一款通过氢气...
华秋工艺分享:第八道主流程之丝... 如图,第八道主流程为 文字 。 文字的目的:文字又名字符。是线路板上白色...
Redis10大数据类型 Redis10大数据类型Redis键(key)一、Redis字符串&#x...
MySQL变量的使用 文章目录1、系统变量1.1 查看系统变量1.2 设置系统变量2、用户变量2.1 定义用户变量2.2 ...
IntelliJ IDEA创建... 目录 ——————————————————————————————— 一、创建Java项目 1、创建...
Qt学习_08_用独立的文件存... 0 前言 上一篇笔记对样式表进行了初步学习,QT学习_07_样式表的初步学习_江湖上都...
小黑子—多媒体技术与运用基础知... 多媒体技术与运用1.0多媒体系列第一章1. 计算机媒体概述1.1 媒体的分类1.2 小结2. 多媒体...
自主移动机器人AMR控制器设计... 近年来,随着社会和技术发展,自主移动已经成为了仓储物流[1]、无人驾驶[...
Java Web应用开发——第... 第二章:JSP基本语法测验 一.单项选择题(共15题,49.5分...
代码自动生成工具实战-Curs... 文章目录Cursor code generate介绍Cursor 代码生成实战prompt1prom...
普通Java工程师 VS 优秀... 1 核心能力 1.1 要成为一名优秀的Java架构师 只懂技术还远远不够,懂技术/懂业...
【爬虫】一、前置知识 一、Web请求过程解析 1.服务器渲染:在服务器端把数据和html整合在一起ÿ...
文心一言话题的思考 ⭐️我叫忆_恒心,一名喜欢书写博客的在读研究生👨‍🎓。...
react-native an... 1. 配置环境 必须安装的依赖有:Node、JDK 和 Android Studio。...
若依分离版选择弹窗数据回读 最近学习若依框架过程中想要实现点击按钮显示弹窗,在弹窗选择信息后回读到父组件中显示&#...
板边器件距离不够,导致元器件无... 电子元器件在PCB板上的 合理布局 ,是减少焊接缺点的极重要一环!元器件...
sdbusplus:通过con... sdbusplus:通过new_method_call同步调用service的meth...
骷髅病毒分析 一、病毒信息病毒名称:骷髅病毒文件名称:d5dac2456fa67584...
使用CRT调式库调式运行时堆 #include#include#define CRTDBG_MAP_ALLOC#include #...
Hive的UDF实现两种简单方... Hive的UDF实现两种简单方法+通过编译源码添加UDF 一、实现简单的say_hello ...
211本科生就业难,绝不是个例... 曾几何时,我们在高中时期日以继夜地努力学习,只为在高考中获得更高的分数&...
Java【多线程基础2】 Th... 文章目录前言一、Thread类1, 构造方法2, 常用成员属性3, 常用成员方法3.1, start...
MySQL分区 一张表的数据在物理层面都是存放在一起的。随着业务增长,当一张表的数据量过大时ÿ...