第二十九课、主窗口中的状态栏------------------狄泰软件学院
一、主窗口中的状态栏
1、状态栏的概念和意义
(1)、状态栏是应用程序中输出简要信息的区域
(2)、状态栏一般位于主窗口的最底部
(3)、状态栏中的消息类型
A、实时消息:如当前程序状态
B、永久消息:如程序版本号,机构名称
C、进度消息:如进度条提示,百分百提示
2、Qt提供了与状态栏相关的类组件
3、在主窗口中创建状态栏
4、Qt状态栏的设计原则
(1)、左边区域用于输出实时消息
(2)、右边区域用于设置永久消息
(3)、addWidget在状态栏的左半部分添加组件
(4)、addPermanentWidget在状态栏右半部分添加组件
1、初探状态栏
#include "MainWindow.h" #include <QStatusBar> #include <QLabel> #include <QPushButton> #include <QLineEdit>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) { /*******************************1、创建状态栏*****************************************/QStatusBar* sb = statusBar(); /*******************************2、创建组件*****************************************/QLabel* label = new QLabel("Label");QLineEdit* edit = new QLineEdit();QPushButton* Btn = new QPushButton();/*******************************3、将组件添加到状态栏*****************************************/ sb->addPermanentWidget(label);sb->addPermanentWidget(edit);sb->addPermanentWidget(Btn);//显示在右边 sb->showMessage("Hello Qt");//在左边 }MainWindow::~MainWindow() {}
MainWindow.cpp
2、NotePad
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMenuBar> #include <QMenu> #include <QAction> #include <QString> #include <QtGui/QMainWindow> #include <QToolBar> #include <QIcon> #include <QSize> #include <QStatusBar> #include <QLabel>class MainWindow : public QMainWindow {Q_OBJECT private:MainWindow(QWidget *parent = 0);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 makeAction(QAction*& action, QString text, int ket);//菜单项bool makeAction(QAction*& action, QString tip, QString icon); public:static MainWindow* NewInstance();~MainWindow(); };#endif // MAINWINDOW_H
MainWindow.h
#include "MainWindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) { }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==NULL) || (!ret->construct())){delete ret;ret = NULL;}return ret; } bool MainWindow::initMenuBar()//菜单栏 {bool ret = true;QMenuBar* mb = menuBar();//一定要注意是menuBar(),这是普通成员函数,不是构造函数 ret = ret && initFileMenu(mb);//传一个参数是为了在initFileMenu()函数将menu加入菜单栏ret = ret && initEditMenu(mb);ret = ret && initFormatMenu(mb);ret = ret && initViewMenu(mb);ret = ret && initHelpMenu(mb);return ret;}bool MainWindow::initToolBar()//工具栏 {bool ret = true;QToolBar* tb = addToolBar("Tool Bar");tb->setMovable(false);tb->setFloatable(false);tb->setIconSize(QSize(16,16));ret = ret && initFileToolItem(tb);return ret; }bool MainWindow::initStatusBar()//状态栏 {bool ret = true;QStatusBar* sb = statusBar();QLabel* label = new QLabel("Made By LGC");if(label != NULL){label->setMinimumWidth(200);label->setAlignment(Qt::AlignHCenter);sb->addPermanentWidget(label);}else{ret = false;}return ret; }/************************************************文件菜单********************************************************/ bool MainWindow::initFileMenu(QMenuBar* mb) {bool ret = true;QMenu* menu = new QMenu("File(&F)");//创建文件菜单,(&F)是为了可以Alt+F打开ret = (menu != NULL);if(ret){QAction* action = NULL;//Newret = ret && makeAction(action, "New(&N)",Qt::CTRL + Qt::Key_N);if(ret){menu->addAction(action);}menu->addSeparator();//Openret = ret && makeAction(action, "Open(&O)...",Qt::CTRL + Qt::Key_O);if(ret){menu->addAction(action);}menu->addSeparator();//Saveret = ret && makeAction(action, "Save(&S)",Qt::CTRL + Qt::Key_S);if(ret){menu->addAction(action);}menu->addSeparator();//Save Asret = ret && makeAction(action, "Save As(&A)...",0);if(ret){menu->addAction(action);}menu->addSeparator();//printret = ret && makeAction(action, "Print(&P)...",Qt::CTRL + Qt::Key_P);if(ret){menu->addAction(action);}menu->addSeparator();//Exitret = ret && makeAction(action, "Exit(&X)",0);if(ret){menu->addAction(action);//将菜单项加入到菜单 }}if(ret){mb->addMenu(menu);//将菜单加入到菜单栏 }else{delete mb;}return ret; }/************************************************编辑菜单********************************************************/ bool MainWindow::initEditMenu(QMenuBar* mb) {bool ret = true;QMenu* menu = new QMenu("Edit(&E)");ret = (menu != NULL);if(ret){QAction* action = NULL;//Undoret = ret && makeAction(action, "Undo(&U)",Qt::CTRL + Qt::Key_Z);if(ret){menu->addAction(action);}menu->addSeparator();//Redoret = ret && makeAction(action, "Redo(&R)...",Qt::CTRL + Qt::Key_Y);if(ret){menu->addAction(action);}menu->addSeparator();//Cutret = ret && makeAction(action, "Cut(&T)",Qt::CTRL + Qt::Key_X);if(ret){menu->addAction(action);}menu->addSeparator();//Copyret = ret && makeAction(action, "Copy(&C)...",Qt::CTRL + Qt::Key_C);if(ret){menu->addAction(action);}menu->addSeparator();//Paseret = ret && makeAction(action, "Pase(&P)...",Qt::CTRL + Qt::Key_V);if(ret){menu->addAction(action);}menu->addSeparator();//Deleteret = ret && makeAction(action, "Delete(&L)",Qt::Key_Delete);if(ret){menu->addAction(action);}menu->addSeparator();//Findret = ret && makeAction(action, "Find(&F)...",Qt::CTRL + Qt::Key_F);if(ret){menu->addAction(action);}menu->addSeparator();//Replaceret = ret && makeAction(action, "Replace(&R)...",Qt::CTRL + Qt::Key_H);if(ret){menu->addAction(action);}menu->addSeparator();//Gotoret = ret && makeAction(action, "Goto(&G)",Qt::CTRL + Qt::Key_G);if(ret){menu->addAction(action);}menu->addSeparator();//Select Allret = ret && makeAction(action, "Select All(&A)",Qt::CTRL + Qt::Key_A);if(ret){menu->addAction(action);}}if(ret){mb->addMenu(menu);}else{delete mb;}return ret; }/************************************************格式菜单********************************************************/ bool MainWindow::initFormatMenu(QMenuBar* mb) {bool ret = true;QMenu* menu = new QMenu("Format(&O)");ret = (menu != NULL);if(ret){QAction* action = NULL;//Auto Wrapret = ret && makeAction(action, "Auto Wrap(&W)",0);if(ret){menu->addAction(action);}menu->addSeparator();//Fontret = ret && makeAction(action, "Font(&F)...",0);if(ret){menu->addAction(action);}}if(ret){mb->addMenu(menu);}else{delete mb;}return ret; }/************************************************视图菜单********************************************************/ bool MainWindow::initViewMenu(QMenuBar* mb) {bool ret = true;QMenu* menu = new QMenu("View(&V)");ret = (menu != NULL);if(ret){QAction* action = NULL;//Tool Barret = ret && makeAction(action, "Tool Bar(&T)",0);if(ret){menu->addAction(action);}menu->addSeparator();//Status Barret = ret && makeAction(action, "Status Bar(&S)",0);if(ret){menu->addAction(action);}}if(ret){mb->addMenu(menu);}else{delete mb;}return ret; }/************************************************帮助菜单********************************************************/ bool MainWindow::initHelpMenu(QMenuBar* mb) {bool ret = true;QMenu* menu = new QMenu("Help(&H)");ret = (menu != NULL);if(ret){QAction* action = NULL;//User Manualret = ret && makeAction(action, "User Manual",0);if(ret){menu->addAction(action);}menu->addSeparator();//About NotePadret = ret && makeAction(action, "About NotePad...",0);if(ret){menu->addAction(action);}}if(ret){mb->addMenu(menu);}else{delete mb;}return ret; }bool MainWindow::initFileToolItem(QToolBar* tb) {bool ret = true;QAction* action = NULL;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);}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);}return ret;}bool MainWindow::makeAction(QAction*& action, QString text, int key)//菜单项 {bool ret = true;action = new QAction(text, NULL);if(action != NULL){action->setShortcut(QKeySequence(key));//创建快捷键 }else{ret = false;}return ret; } bool MainWindow::makeAction(QAction*& action, QString tip, QString icon) {bool ret = true;action = new QAction("", NULL);if(action != NULL){action->setToolTip(tip);action->setIcon(QIcon(icon));}else{ret = false;}return ret; } MainWindow::~MainWindow() {}
MainWindow.cpp
#include <QtGui/QApplication> #include "MainWindow.h"int main(int argc, char *argv[]) {QApplication a(argc, argv);MainWindow* w = MainWindow::NewInstance();int ret = -1;if(w != NULL){w->show();ret = a.exec();}delete w;return ret; }
main.cpp
二、小结
(1)、状态栏是应用程序中输出简要信息的区域
(2)、QStatusBar是Qt中创建状态栏组件的类
(3)、QStatusBar中可以任意添加QWidget
(4)、QStatusBar有自己内置的设计原则
(5)、QStatusBar可以定制出各种形式的状态栏
转载于:https://www.cnblogs.com/gui-lin/p/6407850.html
第二十九课、主窗口中的状态栏------------------狄泰软件学院相关推荐
- 第七课、Qt中的坐标系统------------------狄泰软件学院
一.坐标系统 1.GUI操作系统都有特定的坐标系统 2.图形界面程序在坐标系统中进行窗口和部件的定位 3.定位类型 (1).顶级窗口部件的定位 (2).窗口内部件的定位 (3).窗口部件大小的设置 4 ...
- Python-opencv学习第二十九课:高斯双边模糊
Python-opencv学习第二十九课:高斯双边模糊 文章目录 Python-opencv学习第二十九课:高斯双边模糊 一.学习部分 二.代码部分 1.引入库 2.读入数据 3.完整代码 三.运行结 ...
- NeHe OpenGL第二十九课:Blt函数
NeHe OpenGL第二十九课:Blt函数 Blitter 函数: 类似于DirectDraw的blit函数,过时的技术,我们有实现了它.它非常的简单,就是把一块纹理贴到另一块纹理上. 这篇文章是有 ...
- NeHe OpenGL教程 第二十九课:Blt函数
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- python第二十九课——文件读写(复制文件)
自定义函数:实现文件复制操作有形参(2个) 没有返回值相似版(不用) def copyFile(src,dest):#1.打开两个文件:1个关联读操作,1个关联写操作fr=open(src,'rb') ...
- JAVA 基础 / 第二十九课:接口与继承 / JAVA中的对象转型
2018-03-19 一.明确引用类型与对象类型的概念 引用类型与对象类型的概念 在这个例子里,有一个对象 new ADHero(), 同时也有一个引用ad 对象是有类型的, 是ADHero 引用也是 ...
- java 实现类转接口_JAVA 基础 / 第二十九课:接口与继承 / JAVA中的对象转型
2018-03-19 一.明确引用类型与对象类型的概念 引用类型与对象类型的概念 在这个例子里,有一个对象 new ADHero(), 同时也有一个引用ad 对象是有类型的, 是ADHero 引用也是 ...
- java 根据经纬度计算多边形的面积_强基初中数学amp;学Python——第二十九课 根据海伦秦九韶公式编程计算三角形面积...
问题:如果把边长都是有理数的三角形称作"有理三角形",编程计算"有理三角形"的面积(有理数或带根号的无理数,不是浮点数). 关键点分析:根号中的底化成最简分数, ...
- 大三小学期进阶课程第二十九课:感知概貌
第29课.感知概貌 人类开车与机器开车在感知上的区别 (1)感知是机器人学科的问题,机器人要做的即是像人类学习,但不是完全模仿,应做到扬长避短.例如飞机的飞行不需要和鸟的飞行一样,而是要根据自己的特性 ...
最新文章
- Minionda3环境的迁移
- Spring MVC中注解 @ModelAttribute
- 关于Hexo6.0搭建个人博客(github+Google-收录篇)
- u盘正常接入后计算机无法看到,u盘在我的电脑显示不出来怎么办-处理u盘在我的电脑无法显示的方案 - 河东软件园...
- EF 数据迁移 常见错误
- Class Imbalance Problem
- real类型_如何使用REAL方法对您的Web内容进行现实检查
- UVA4671 K-neighbor substrings FFT+字符串hash
- 使用R进行相关性分析
- 欧几里得gcd/extend_gcd
- php+js实现弹幕,jquery.barrager.js-专业的网页弹幕插件
- 设置DefaultHttpClient和HttpClient的超时时间的方法
- windows服务器查看系统异常,Windows服务器异常---查看系统日志--以蓝屏为例分析...
- 精简DropDownList用法
- 46 -算法 - Leetcode -169 - 多数元素 - map insert 迭代器
- [史]世界史上的6大古帝国
- Anaconda安装教程
- 你以为打上马赛克就安全了吗?用Python一键还原,了解一下?
- 1加3减5加7减9C语言表示,c语言中1+三分之一加五分之二加七分之三
- particle system 脚本修改粒子颜色
热门文章
- exchange 2010 无人值守安装
- 如何编写有效的Bug Report
- C++面试中string类的一种正确简明的写法
- 很多大企业都在用的Pentaho 商业分析软件中存在多个严重缺陷
- 持续集成商 Travis CI 爆严重漏洞,数千开源项目机密或被盗
- 苹果修复今年以来的第13个0day,影响iOS 和 macOS
- day1: python3.5学习
- PHP性能调优,PHP慢日志---善用php-fpm的慢执行日志slow log,分析php性能问题
- [20151126]IMPDP TRANSFORM参数.TXT
- android中的屏幕单位介绍