C/C++ Qt StatusBar底部状态栏应用教程

作者:LyShark 时间:2023-09-29 16:25:45 

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;
}

运行代码效果如下:

C/C++ Qt StatusBar底部状态栏应用教程

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


#include "mainwindow.h"
#include "ui_mainwindow.h"
#include &lt;QLabel&gt;

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
   ui-&gt;setupUi(this);

// 隐藏状态栏下方三角形
   ui-&gt;statusBar-&gt;setSizeGripEnabled(false);

// 新增标签栏
   QLabel *label_url = new QLabel(this);
   QLabel *label_about = new QLabel(this);

// 配置连接
   label_url-&gt;setFrameStyle(QFrame::Box | QFrame::Sunken);
   label_url-&gt;setText(tr("&lt;a href=\"https://lyshark.cnblogs.com\"&gt;访问主页&lt;/a&gt;"));
   label_url-&gt;setOpenExternalLinks(true);

label_about-&gt;setFrameStyle(QFrame::Box | QFrame::Sunken);
   label_about-&gt;setText(tr("&lt;a href=\"https://lyshark.cnblogs.com\"&gt;关于我&lt;/a&gt;"));
   label_about-&gt;setOpenExternalLinks(true);

// 将信息增加到底部(永久添加)
   ui-&gt;statusBar-&gt;addPermanentWidget(label_url);
   ui-&gt;statusBar-&gt;addPermanentWidget(label_about);
}

MainWindow::~MainWindow()
{
   delete ui;
}

运行代码效果如下:

C/C++ Qt StatusBar底部状态栏应用教程

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


#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);
}

运行代码效果如下:

C/C++ Qt StatusBar底部状态栏应用教程

接着我们增加一个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底部状态栏应用教程

来源:https://www.cnblogs.com/LyShark/p/15637184.html

标签:C++,Qt,StatusBar,底部状态栏
0
投稿

猜你喜欢

  • Java线程同步、同步方法实例详解

    2023-10-16 07:10:53
  • C#将html table 导出成excel实例

    2023-12-20 04:58:55
  • java如何通过IP解析地理位置

    2021-09-11 08:01:07
  • C#实现把彩色图片灰度化代码分享

    2022-04-21 18:11:33
  • C#清除字符串内空格的方法

    2023-10-07 15:51:04
  • 详解Java目录操作与文件操作教程

    2023-12-05 13:45:48
  • 详解Spring Data JPA使用@Query注解(Using @Query)

    2023-11-29 14:49:34
  • python 转换 Javascript %u 字符串为python unicode的代码

    2022-07-28 03:15:14
  • C++超详细讲解贪心策略的设计及解决会场安排问题

    2022-07-26 12:08:04
  • Android 游戏开发之Canvas画布的介绍及方法

    2021-12-14 23:10:54
  • java private关键字用法实例

    2022-01-16 10:08:06
  • Android中实现OkHttp上传文件到服务器并带进度

    2023-02-10 21:44:09
  • springboot拦截器Interceptor的使用,你都了解吗

    2023-01-01 21:53:40
  • Android Studio真机无线连接USB设备调试运行详解流程

    2023-12-13 00:37:37
  • Java8新特性之接口中的默认方法和静态方法

    2021-08-21 07:25:43
  • Java中一维二维数组的静态和动态初始化

    2022-10-09 11:33:06
  • java动态代理和cglib动态代理示例分享

    2023-10-26 18:36:02
  • Android实现从底部弹出的Dialog示例(一)

    2021-09-12 13:33:09
  • C++ OpenCV单峰三角阈值法Thresh_Unimodal详解

    2022-06-09 14:36:46
  • android基于SwipeRefreshLayout实现类QQ的侧滑删除

    2023-05-22 14:49:19
  • asp之家 软件编程 m.aspxhome.com