一、主窗口中的状态栏

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

第二十九课、主窗口中的状态栏------------------狄泰软件学院相关推荐

  1. 第七课、Qt中的坐标系统------------------狄泰软件学院

    一.坐标系统 1.GUI操作系统都有特定的坐标系统 2.图形界面程序在坐标系统中进行窗口和部件的定位 3.定位类型 (1).顶级窗口部件的定位 (2).窗口内部件的定位 (3).窗口部件大小的设置 4 ...

  2. Python-opencv学习第二十九课:高斯双边模糊

    Python-opencv学习第二十九课:高斯双边模糊 文章目录 Python-opencv学习第二十九课:高斯双边模糊 一.学习部分 二.代码部分 1.引入库 2.读入数据 3.完整代码 三.运行结 ...

  3. NeHe OpenGL第二十九课:Blt函数

    NeHe OpenGL第二十九课:Blt函数 Blitter 函数: 类似于DirectDraw的blit函数,过时的技术,我们有实现了它.它非常的简单,就是把一块纹理贴到另一块纹理上. 这篇文章是有 ...

  4. NeHe OpenGL教程 第二十九课:Blt函数

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  5. python第二十九课——文件读写(复制文件)

    自定义函数:实现文件复制操作有形参(2个) 没有返回值相似版(不用) def copyFile(src,dest):#1.打开两个文件:1个关联读操作,1个关联写操作fr=open(src,'rb') ...

  6. JAVA 基础 / 第二十九课:接口与继承 / JAVA中的对象转型

    2018-03-19 一.明确引用类型与对象类型的概念 引用类型与对象类型的概念 在这个例子里,有一个对象 new ADHero(), 同时也有一个引用ad 对象是有类型的, 是ADHero 引用也是 ...

  7. java 实现类转接口_JAVA 基础 / 第二十九课:接口与继承 / JAVA中的对象转型

    2018-03-19 一.明确引用类型与对象类型的概念 引用类型与对象类型的概念 在这个例子里,有一个对象 new ADHero(), 同时也有一个引用ad 对象是有类型的, 是ADHero 引用也是 ...

  8. java 根据经纬度计算多边形的面积_强基初中数学amp;学Python——第二十九课 根据海伦秦九韶公式编程计算三角形面积...

    问题:如果把边长都是有理数的三角形称作"有理三角形",编程计算"有理三角形"的面积(有理数或带根号的无理数,不是浮点数). 关键点分析:根号中的底化成最简分数, ...

  9. 大三小学期进阶课程第二十九课:感知概貌

    第29课.感知概貌 人类开车与机器开车在感知上的区别 (1)感知是机器人学科的问题,机器人要做的即是像人类学习,但不是完全模仿,应做到扬长避短.例如飞机的飞行不需要和鸟的飞行一样,而是要根据自己的特性 ...

最新文章

  1. Minionda3环境的迁移
  2. Spring MVC中注解 @ModelAttribute
  3. 关于Hexo6.0搭建个人博客(github+Google-收录篇)
  4. u盘正常接入后计算机无法看到,u盘在我的电脑显示不出来怎么办-处理u盘在我的电脑无法显示的方案 - 河东软件园...
  5. EF 数据迁移 常见错误
  6. Class Imbalance Problem
  7. real类型_如何使用REAL方法对您的Web内容进行现实检查
  8. UVA4671 K-neighbor substrings FFT+字符串hash
  9. 使用R进行相关性分析
  10. 欧几里得gcd/extend_gcd
  11. php+js实现弹幕,jquery.barrager.js-专业的网页弹幕插件
  12. 设置DefaultHttpClient和HttpClient的超时时间的方法
  13. windows服务器查看系统异常,Windows服务器异常---查看系统日志--以蓝屏为例分析...
  14. 精简DropDownList用法
  15. 46 -算法 - Leetcode -169 - 多数元素 - map insert 迭代器
  16. [史]世界史上的6大古帝国
  17. Anaconda安装教程
  18. 你以为打上马赛克就安全了吗?用Python一键还原,了解一下?
  19. 1加3减5加7减9C语言表示,c语言中1+三分之一加五分之二加七分之三
  20. particle system 脚本修改粒子颜色

热门文章

  1. exchange 2010 无人值守安装
  2. 如何编写有效的Bug Report
  3. C++面试中string类的一种正确简明的写法
  4. 很多大企业都在用的Pentaho 商业分析软件中存在多个严重缺陷
  5. 持续集成商 Travis CI 爆严重漏洞,数千开源项目机密或被盗
  6. 苹果修复今年以来的第13个0day,影响iOS 和 macOS
  7. day1: python3.5学习
  8. PHP性能调优,PHP慢日志---善用php-fpm的慢执行日志slow log,分析php性能问题
  9. [20151126]IMPDP TRANSFORM参数.TXT
  10. android中的屏幕单位介绍