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 }; 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); QTableWidgetItem *item = ui->tableWidget->item(currentRow,currentColumn); if (item == NULL ) return ; labCellIndex->setText(QString::asprintf("当前坐标: %d 行 | %d 列" ,currentRow,currentColumn)); } MainWindow::~MainWindow() { delete ui; }
运行代码效果如下: