Qt窗体中默认会附加一个QstatusBar组件,状态栏组件位于主窗体的最下方,其作用是提供一个工具提示功能,当程序中有提示信息是可以动态的显示在这个区域内,状态栏组件内可以增加任何Qt中的通用组件,只需要通过addWidget函数动态追加即可引入到底部,底部状态栏在实际开发中应用非常普遍,以下代码是对该组件基本使用方法的总结。

首先我们通过new新增3个QLabel组件,并将该组件依次排列在底部状态栏内,实现代码如下所示:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QLabel> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this); // 初始化状态栏
QLabel *labCellIndex = new QLabel("当前坐标: 0.0",this);
labCellIndex->setMinimumWidth(250); QLabel *labCellType=new QLabel("单元格类型: null",this);
labCellType->setMinimumWidth(200); QLabel *labStudID=new QLabel("学生ID: 0",this);
labStudID->setMinimumWidth(200); // 将初始化的标签添加到底部状态栏上
ui->statusBar->addWidget(labCellIndex);
ui->statusBar->addWidget(labCellType);
ui->statusBar->addWidget(labStudID);
} MainWindow::~MainWindow()
{
delete ui;
}

运行代码效果如下:

QLabel组件除了可以增加提示信息以外,通过设置setOpenExternalLinks可以将这个组件设置为以链接形式出现,有利于我们增加网页跳转等功能。

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QLabel> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this); // 隐藏状态栏下方三角形
ui->statusBar->setSizeGripEnabled(false); // 新增标签栏
QLabel *label_url = new QLabel(this);
QLabel *label_about = new QLabel(this); // 配置连接
label_url->setFrameStyle(QFrame::Box | QFrame::Sunken);
label_url->setText(tr("<a href=\"https://lyshark.cnblogs.com\">访问主页</a>"));
label_url->setOpenExternalLinks(true); label_about->setFrameStyle(QFrame::Box | QFrame::Sunken);
label_about->setText(tr("<a href=\"https://lyshark.cnblogs.com\">关于我</a>"));
label_about->setOpenExternalLinks(true); // 将信息增加到底部(永久添加)
ui->statusBar->addPermanentWidget(label_url);
ui->statusBar->addPermanentWidget(label_about);
} MainWindow::~MainWindow()
{
delete ui;
}

运行代码效果如下:

同理,只要是通用组件都可以被安置到底部菜单栏,如果我们需要增加进度条组件只需要这样写:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QLabel>
#include <QProgressBar> QProgressBar *pro; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this); pro = new QProgressBar(this); // 自动计算
ui->statusBar->addPermanentWidget(pro, 1); // 设置进度是否显示
pro->setTextVisible(true); // 设置初始化进度位置
pro->setValue(0);
} MainWindow::~MainWindow()
{
delete ui;
} void MainWindow::on_pushButton_clicked()
{
qint32 count = pro->value();
count = count +10;
pro->setValue(count);
}

运行代码效果如下:

接着我们增加一个tablewidget并初始化参数,tableWidget组件存在一个on_tableWidget_currentCellChanged属性,该属性的作用是,只要Table表格存在变化则会触发,当用户选择不同的表格,我们可以将当前表格行列自动设置到状态栏中,从而实现同步状态栏消息提示,起到时刻动态显示的作用。

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QLabel>
#include <QTableWidget>
#include <QTableWidgetItem> QLabel *labCellIndex; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this); // ------------------------------------------------------------------------------------
// 初始化状态栏
labCellIndex = new QLabel("当前坐标: 0.0",this);
labCellIndex->setMinimumWidth(250); // 将初始化的标签添加到底部状态栏上
ui->statusBar->addWidget(labCellIndex); // ------------------------------------------------------------------------------------
// 填充数据,对表格进行初始化操作
QStringList header;
header << "姓名" << "性别" << "年龄"; ui->tableWidget->setColumnCount(header.size()); // 设置表格的列数
ui->tableWidget->setHorizontalHeaderLabels(header); // 设置水平头
ui->tableWidget->setRowCount(5); // 设置总行数
ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); // 设置表结构默认不可编辑 // 填充数据
QStringList NameList;
NameList << "lyshark A" << "lyshark B" << "lyshark C"; QStringList SexList;
SexList << "男" << "男" << "女"; qint32 AgeList[3] = {22,23,43}; // 针对获取元素使用 NameList[x] 和使用 NameList.at(x)效果相同
for(int x=0;x< 3;x++)
{
int col =0;
// 添加姓名
ui->tableWidget->setItem(x,col++,new QTableWidgetItem(NameList[x]));
// 添加性别
ui->tableWidget->setItem(x,col++,new QTableWidgetItem(SexList.at(x)));
// 添加年龄
ui->tableWidget->setItem(x,col++,new QTableWidgetItem( QString::number(AgeList[x]) ) );
}
} // 当前选择单元格发生变化时触发响应事件,也就是将底部状态栏标签设置
// https://www.cnblogs.com/lyshark
void MainWindow::on_tableWidget_currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn)
{
Q_UNUSED(previousRow);
Q_UNUSED(previousColumn); // 显示行与列的变化数值
//std::cout << "currentRow = " << currentRow << " currentColumn = " << currentColumn << std::endl;
//std::cout << "pre Row = " << previousRow << " pre Column = " << previousColumn << std::endl; // 获取当前单元格的Item
QTableWidgetItem *item = ui->tableWidget->item(currentRow,currentColumn);
if(item == NULL)
return; // 设置单元格坐标
labCellIndex->setText(QString::asprintf("当前坐标: %d 行 | %d 列",currentRow,currentColumn));
} MainWindow::~MainWindow()
{
delete ui;
}

运行代码效果如下:

C/C++ Qt StatusBar 底部状态栏应用的更多相关文章

  1. 【Qt开发】状态栏设置

    1.在Qt 里面,状态栏显示的信息有三种类型:临时信息.一般信息和永久信息.  其中,临时信息指临时显示的信息,比如QAction 的提示等,也可以设置自己的  临时信息,比如程序启动之后显示Read ...

  2. 【Qt编程】Qt学习之状态栏

    QStatusBar类提供一个水平条来显示状态信息.所谓状态信息,拿个简单的例子来说,当你在word中编辑时,左下角就会出现页面.字数等等信息.状态信息可以分为三类:临时信息,如一般的提示信息:正常信 ...

  3. 如何去掉(隐藏)系统的StatusBar(状态栏)

         在定制TV版本中,经常需要去掉StatusBar的需求,那么如何更好更方便的去掉StatusBar呢?         StatusBar是Android系统中重要的组成部分,可以看到一些提 ...

  4. StatusBar时间状态栏

    StatusBar:

  5. Android全屏(包含3种隐藏顶部状态栏及标题栏和一种隐藏Android 4.0平板底部状态栏的方法)

    http://www.xuebuyuan.com/558284.html 方法一 public class MainActivity extends Activity { @Override prot ...

  6. Qt Creator实现状态栏显示

    在程序主窗口Mainwindow中,有菜单栏,工具栏,中心部件和状态栏.前面几个已经讲过了,这次讲解状态栏的使用. 程序中有哪些不明白的类或函数,请自己查看帮助. 1.我们在mainwindow.h中 ...

  7. 修改VScode底部状态栏颜色

    点击齿轮进入setting 搜索workbench.colorCustomizations,然后点击编辑setting.json 修改为你喜欢的颜色即可,我这里修改为蓝色 例子: "work ...

  8. MTK 隐藏底部状态栏

    步骤: 源码/frameworks/base/policy/src/com/android/internal/policy/impl目录下修改PhoneWindowManager.java文件. 修改 ...

  9. qt 状态栏

    有段时间没有写过博客了.假期去上海旅游,所以一直没有能够上网.现在又来到这里,开始新的篇章吧!   今天的内容主要还是继续完善前面的那个程序.我们要为我们的程序加上一个状态栏.   状态栏位于主窗口的 ...

随机推荐

  1. 攻防世界 杂项13.can_has_stdio?

    打开发现是由trainfuck编码组成的小星星阵容,果断交给解密网站进行解密, 解密网站:http://ctf.ssleye.com/brain.html flag:flag{esolangs_for ...

  2. eclipse javaEE版下载过程中选择镜像(Select Another Mirror)无反应解决办法,附带eclipse javaEE版下载教程。

    1.eclipse javaEE版下载过程中选择镜像(Select Another Mirror)无反应 (复制该网址下载即可 https://mirrors.neusoft.edu.cn/eclip ...

  3. RocketMQ源码详解 | Broker篇 · 其二:文件系统

    概述 在 Broker 的通用请求处理器将一个消息进行分发后,就来到了 Broker 的专门处理消息存储的业务处理器部分.本篇文章,我们将要探讨关于 RocketMQ 高效的原因之一:文件结构的良好设 ...

  4. 微服务之十四如何在 Ocelot 网关中配置多实例 Swagger 访问

    一.介绍 当我们开发基于微服务的应用程序的时候,有一个环节总是跳不过去的,那就是要创建 WebApi,然后,我们的应用程序基于 WebApi 接口去访问.在没有 Swagger 以前,我们开发好了 W ...

  5. js-arguments 函数参数对象详解

    前言 JavaScript 函数参数不同于其他编程语言,既不需要规定参数的类型,也不需要关心参数的个数,因此 JavaScript 因函数参数而变得十分灵活,本文总结一下 arguments 参数对象 ...

  6. 【浏览器】聊聊DOM

    [浏览器]聊聊DOM 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 说明 作为前端开发,在以前的工作中大多是和DOM打交道,到 ...

  7. python调试出现报错:SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xb0 in position 9: invalid start byte

    原因:如图,代码里字符串里加上汉字就会报相关错误: 解决办法:开头加上 #-*-coding:GBK -*-   即可解决

  8. idea连接数据库时区错误

    错误界面 IDEA连接mysql,地址,用户名,密码,数据库名,全都配置好了,点测试连接,咔!不成功! 界面是这样的, 翻译过来就是:服务器返回无效时区.进入"高级"选项卡,手动设 ...

  9. Java发展的重大事故

    1990年,在Sun计算机公司中,由Patrick Naughton.Mi keSheridan 及 James Gosling领导的小组Green Team,开发出的新的程序语言,命名为0ak, 后 ...

  10. SVGO: Node.js 开发的 SVG 矢量图优化工具(svg压缩工具)

    SVG图片压缩 这是个通过借助npm包的一种方式去压缩svg的图片,由于阿里的图库自己创建的图标有大小的限制,当我们想要自己用自己的图标的时候就可以使用这种方式去完成对svg的图片压缩. 1.下载no ...