1.状态栏功能
如下图所示,分别可以显示外部链接、接收和发送数据流量以及当前系统时间。

2.功能实现
使用标签实现,将标签和状态栏进行关联,在合适的地方更新标签的内容即可。
step1:mainwindow.h 中添加标签兑现,发送和接收变量、系统时间变量,相应函数声明
//添加自定义变量
long ComSendSum,ComRevSum;//发送和接收流量统计变量
QDateTime curDateTime;//系统时间变量
//下列标签将显示在状态栏
QLabel *qlbSendSum,*qlbRevSum;//发送接收流量label对象
QLabel *currentTimeLabel; //系统时间显示标签
QLabel *qlbLinkRYMCU;//官网链接标签对象
QLabel *qlbLinkSource;//源码链接标签对象
void time_update(); //时间更新槽函数,状态栏显示时间
void setNumOnLabel(QLabel *lbl, QString strS, long num);//设置标签内容
step2: 初始化系统时间显示定时器,标签与状态栏关联、内容初始化
QTimer *DateTimer = new QTimer(this);//状态栏显示时间,日期
connect(DateTimer,&QTimer::timeout,this,[=](){time_update();});
DateTimer->start(1000); //每隔1000ms发送timeout的信号
//设置底部状态栏,以及相应的标签初始化
QStatusBar *STABar = statusBar();//获取状态栏
qlbSendSum = new QLabel(this);//创建发送统计标签
qlbRevSum = new QLabel(this);//创建接收统计标签
currentTimeLabel = new QLabel(this); // 创建时间,日期显示标签
qlbLinkRYMCU = new QLabel(this);//官网链接标签对象
qlbLinkSource = new QLabel(this);//源码链接标签对象
qlbLinkRYMCU->setMinimumSize(90, 20);// 设置标签最小大小
qlbLinkSource->setMinimumSize(90, 20);
qlbSendSum->setMinimumSize(100, 20);
qlbRevSum->setMinimumSize(100, 20);
currentTimeLabel->setMinimumSize(100, 20);
ComSendSum = 0;
ComRevSum = 0;
setNumOnLabel(qlbSendSum, "Tx: ", ComSendSum);
setNumOnLabel( qlbRevSum, "Rx: ", ComRevSum);
STABar->addPermanentWidget(qlbSendSum);// 从右往左依次添加
STABar->addPermanentWidget(qlbRevSum);
STABar->addPermanentWidget(currentTimeLabel);
STABar->addWidget(qlbLinkRYMCU);// 从左往右依次添加
STABar->addWidget(qlbLinkSource);
qlbLinkRYMCU->setOpenExternalLinks(true);//状态栏显示官网、源码链接
qlbLinkRYMCU->setText("<style> a {text-decoration: none} </style> <a href=\"https://rymcu.com\">--RYMCU官网--");// 无下划线
qlbLinkSource->setOpenExternalLinks(true);
qlbLinkSource->setText("<style> a {text-decoration: none} </style> <a href=\"https://github.com/rymcu/RYCOM\">--助手源代码--");// 无下划线
状态栏设置函数、系统时间显示定时器超时函数
/***********************************************************
* 状态栏标签显示计数值
* 1.设置标签显示内容
***********************************************************/
void MainWindow::setNumOnLabel(QLabel *lbl, QString strS, long num)
{
// 标签显示
QString strN;
strN.sprintf("%ld", num);
QString str = strS + strN;
lbl->setText(str);
}
/***********************************************************
* 状态栏时间,日期更新函数
* 1.状态栏时间显示标签定时器超时函数,将当前时间设置到状态栏标签
***********************************************************/
void MainWindow::time_update()
{
QDateTime current_time = QDateTime::currentDateTime();//获取时间
QString timestr = current_time.toString("yyyy-MM-dd hh:mm:ss"); //设置显示的格式
currentTimeLabel->setText(timestr); //设置label的文本内容为时间
}
step3:发送、接收流量统计,分别在发送和接收处理槽函数中添加新代码如下:
void MainWindow::on_pushButtonSend_clicked()//发送处理函数
{
............
............
//发送数据
temp = MyCom.write(ComSendData);
//统计发送流量,并显示在状态栏
if(temp)
{
ComSendSum +=temp;//发送总数统计
setNumOnLabel(qlbSendSum, "Tx: ", ComSendSum);// 状态栏显示计数值
}
}
void MainWindow::MyComRevSlot()//接收处理函数
{
............
............
//接收流量统计,并显示到状态栏
ComRevSum += MyComRevBUff.size();
setNumOnLabel(qlbRevSum, "Rx: ", ComRevSum);
}
3.小结
完成标签栏功能设计,可根据自己要求适当增减。