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\">访问主页</a>"));label_url->setOpenExternalLinks(true);label_about->setFrameStyle(QFrame::Box | QFrame::Sunken);label_about->setText(tr("<a href=\"https://lyshark\">关于我</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]) ) );}
}// 当前选择单元格发生变化时触发响应事件,也就是将底部状态栏标签设置
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;// 获取当前单元格的ItemQTableWidgetItem *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. android4.0.3去掉底部状态栏statusbar,全屏显示示例代码

    要去掉android4.0上的状态栏,全屏显示的代码如下: 1.将usleep和killall这二个文件放到assets文件夹下.这二个文件可在下面的附件中下载到. 2.创建Device.java(注 ...

  2. RK3288[android 7.1]调试笔记 隐藏底部状态栏截屏按钮

    RK3288[android 7.1]调试笔记 隐藏底部状态栏截屏按钮 修改frameworks/base/packages/SystemUI/src/com/android/systemui/sta ...

  3. delphi StatusBar在状态栏中显示checkBox

    //StatusBar在状态栏中显示checkBox procedure TForm1.CheckBox1Click(Sender: TObject); begin        Image1.Vis ...

  4. VSCode打开底部状态栏

    VSCode打开底部状态栏 首先:Ctrl+Shift+P 其次输入:View:Toggle Status Bar Visibility

  5. win10系统更新后底部状态栏经常无响应

    win10系统更新后底部状态栏经常无响应 最近win10系统自动更新后出现了底部状态栏经常无响应的问题(鼠标转圈,系统假死),由于之前从未发生过此类情况,因此怀疑是系统更新产生的问题. 情况说明:更新 ...

  6. Visual Studio Code底部状态栏的隐藏及复原

    隐藏 1.底部状态栏-->右键-->隐藏状态栏 复原 1.文件-->首选项 -->设置-->外观-->Status Bar(勾选即为可见)图1.2 2.左下角设置图 ...

  7. android view设置按钮颜色_Android关于StatusBar(状态栏)总结

    从事Android开发的同学了解,对于StatusBar的控制,并没有ios那样好,需要对Android不同的系统版本进行适配,同时也需要对小米,魅族等国产手机单独适配,想要如ios那般好的体验,并没 ...

  8. Android SystemUI之StatusBar,状态栏(二)

    Android  SystemUI系列: 1.Android  SystemUI之启动流程(一) 2.Android SystemUI之StatusBar,状态栏(二) 3.Android Syste ...

  9. Win11底部状态栏如何换成黑色?Win11底部状态栏换黑色的方法

    正常情况Windows系统默认的底部状态栏颜色都是浅蓝色,不过很多小伙伴觉得长时间观看会比较乏,想要去更换一个颜色却不知道要如何操作,那么碰到这种情况我们应该怎么办呢?下面就和小编一起来看看底部状态栏 ...

最新文章

  1. 解析腾讯行政区划API接口数据
  2. iOS开发工具篇:cocoaPods 添加第三方库链接报错
  3. 重磅,Kubernetes 决定弃用 Docker!
  4. 静态函数一个有用的设计模式
  5. cloud一分钟 | 李飞飞离任谷歌云,工作重心将重新转回学术界
  6. Java RandomAccessFile writeLong()方法与示例
  7. 一些关于Spring的随笔
  8. 菜鸟的学习之路(12) —HashSet类详解
  9. 属于哪个单元_到底怎么挑?动铁、动圈、动铁动圈混合买耳机哪个更好?
  10. 华为机试HJ28:素数伴侣
  11. 如何证明NP-Hard Problems
  12. java 牙位图插件_牙医的骄傲-智能牙位图中文医疗应用app全球排名No.1
  13. 金蝶k3系统中间服务器不可用,【金蝶软件】客户端登陆时提示远程服务器不存在或不可用(金蝶K3系统)...
  14. ❤️❤️新生代农民工熬夜整理Python入门教程,包教包会!附源码❤️❤️
  15. 【贪玩巴斯】数字信号处理Digital Signal Processing(DSP)——第二节「离散时间信号详解」2021-09-29
  16. 时差怎么理解_懂的人自然懂,不懂的人再多解释也有时差
  17. 总弹出Visual Studio实时调试器的问题
  18. MFC隐藏任务栏图标并显示到托盘
  19. [SDOI2015] 星际战争
  20. BTN7970在直流电机驱动系统中的应用

热门文章

  1. c++常见面试问题总结
  2. mysql基本SQL语句
  3. NORDIC Thing:52 Android App 学习之一:THINGY 52 节点与手机的蓝牙识别、过滤及通信建立
  4. 【面试常问】Java中final和finally以及finalize区别?
  5. 海思平台的拍照和拍照后期处理算法的介绍
  6. Git统计一段时间内代码的修改量
  7. 最常考的Java后台面试题(一)Java基础
  8. 在微型计算机中cmos是什么,什么事cmos?
  9. 数字资产普及,如何规避加密风险?
  10. 火山引擎数智平台的这款产品,正在帮助 APP 提升用户活跃度