C/C++ Qt StatusBar底部状态栏应用教程
作者:LyShark 发布时间:2023-09-29 16:25:45
标签:C++,Qt,StatusBar,底部状态栏
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;
}
运行代码效果如下:
来源:https://www.cnblogs.com/LyShark/p/15637184.html


猜你喜欢
- 简介netty中的数据是通过ByteBuf来进行传输的,一个ByteBuf中可能包含多个有意义的数据,这些数据可以被称作frame,也就是说
- 正文 #方法一:使用string.Contains方法string.Contains是大小写敏感的,如果要用该方法来判断一个str
- 1 概念方面List是接口,ArrayList是List接口的一个实现类2 初始化方面2.1 List2.1.1 错误写 * ist list
- 本文为大家分享了Android使用线程获取网络图片的具体代码,供大家参考,具体内容如下AndroidManifest.xml &n
- 其实本没有没打算写这篇的,但还是要写一下写这篇博客的起因是因为,现在呆着的这家公司居然没有统一的API返回格式?,询问主管他居然告诉我用HT
- 一、前言最近在看android fragment与Activity进行数据传递的部分,看到了接口回调的内容,今天来总结一下。二、回调的含义和
- 在Android开发中我们经常会用到网络连接功能与服务器进行数据的交互,为此Android的SDK提供了Apache的HttpClient来
- Notification的作用通知(Notification)是Android系统中比较有特色的一个功能。当某个应用程序希望向用户发出一些提
- Room的三个主要组件:数据库类,用于保存数据库并作为应用持久性数据底层连接的主要访问点。数据实体,@Entity,表示数据库中的表。数据访
- 1、python的每一个语句的后面可以添加分号也可以不添加分号;在一行有多条语句的时候,必须使用分号加以区分2、查看Python版本号,在D
- 概述从今天开始, 小白我将带大家开启 Java 数据结构 & 算法的新篇章.冒泡排序冒泡排序 (Bubble Sort) 是一种简单
- 消息队列1.消息队列的原理1.1 msgqueue采用链表来实现消息队列, 该链表是由系统内核维护,1.2 系统中可能有很多的msgqueu
- 前言在 C# 编程中,管道式编程(Pipeline Style programming)其实存在已久,最明显的就是我们经常使用的 LINQ。
- Java BorderLayout布局管理器的两种排列java中Frame类默认的布局管理器为BorderLayout,其主要是将Frame
- 本文实例总结了C#配置文件Section节点处理方法。分享给大家供大家参考。具体如下:很多时候在项目开发中,我们都需要用配置文件来存储一些关
- 最近由于工作原因,没时间更新,开始吧~~关于json的返回需要用到一个工具包来将书转换为json格式,在此用到的jar包为: im
- 先上效果图: 工具类在解析的过程中,我们会和byte做各种运算,所以我定义了一个byte工具类ByteUtils:using Sy
- 背景:最近小组进行一个环境比较恶劣的项目,由于没有真实的测试环境,决定上云,最终选择国外的heroku,折腾半天,其中有一些坑在这里记录下来
- 附GitHub源码:WebViewExplore一、WebView的基础配置WebSettings ws = getSettings();w
- 下面的例子为使用自定义的列表适配器来显示列表。 View Code import android.os.Bundle; import and