欢迎关注公众号(20YC编程),有免费C++视频课程哦!
-今日内容-
1 QStatusBar简介
QStatusBar状态栏是Qt提供的一个状态显示控件,通常与QMainWindow类一起使用。QMainWindow类提供了一个setStatusBar()方法,可以方便地添加QStatusBar对象。
QStatusBar可以显示三种类型的信息:临时信息、一般信息和永久信息。临时信息是指临时显示的信息,例如QAction的提示等,也可以设置自己的临时信息,例如程序启动之后显示Ready,一段时间后自动消失。一般信息可以用来显示页码之类的。永久信息是不会消失的信息,例如可以在状态栏提示用户Caps Lock键被按下之类。
2 如何使用QStatusBar
头文件:#include <QStatusBar>
cmake:find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake:QT += widgets
继承于:QWidget
3 示例说明
本示例演示了如何在QMainWindow主界面插入一个QStatusBar状态栏控件。同时在QStatusBar插入一个QLabel来显示当前时间。
示例还演示了定时器的使用。
在这个例子中,我们首先创建一个名为IMainWindow的类,该类继承于QMainWindow。在IMainWindow的构造函数中,我们创建一个QStatusBar实例,再创建一个QLabel标签控件,用来显示当前当前,将QLabel控件将标签控件永久添加到状态栏中。
然后,我们利用QObject::startTimer()创建一个1000毫秒定时器,最后我们在IMainWindow::timerEvent()定时器事件处理函数,获取当前时间并显示到QStatusBar状态栏里面的QLabel控件上。
4 示例执行效果
5 示例代码
imainwindow.h:
cpp
#ifndef IMAINWINDOW_H
#define IMAINWINDOW_H
#include <QMainWindow>
#include <QLabel>
class IMainWindow : public QMainWindow
{
Q_OBJECT
public:
IMainWindow(QWidget *parent = nullptr);
~IMainWindow();
private:
// 定时器事件处理函数
virtual void timerEvent(QTimerEvent *event);
private:
QLabel *m_pLabel{nullptr};
int m_iTimerId{0};
};
#endif // IMAINWINDOW_H
imainwindow.cpp:
cpp
#include "imainwindow.h"
#include <QStatusBar>
#include <QLabel>
#include <QTimerEvent>
#include <QDateTime>
IMainWindow::IMainWindow(QWidget *parent)
: QMainWindow(parent)
{
this->setWindowTitle("欢迎关注公众号(20YC编程)");
this->resize(680, 320);
// 默认创建状态栏
auto p_status_bar = this->statusBar();
p_status_bar->showMessage("这是一个QMainWindow集成QStatusBar示例,右边是一个显示当前时间的QLabel控件。");
// 创建一个标签控件,用于显示当前时间
m_pLabel = new QLabel("");
m_pLabel->setMinimumSize(120, 20); // 设置部件的最小尺寸
m_pLabel->setStyleSheet("QLabel { color: red; }");
// 将标签控件永久添加到状态栏中
p_status_bar->addPermanentWidget(m_pLabel);
// 创建一秒定时器
m_iTimerId = QObject::startTimer(1000, Qt::PreciseTimer);
}
IMainWindow::~IMainWindow()
{
QObject::killTimer(m_iTimerId);
}
void IMainWindow::timerEvent(QTimerEvent *event)
{
if (event->timerId() == m_iTimerId)
{
// 显示当前时间到QStatusBar的永久信息控件上
const QString qstr_time = QDateTime::currentDateTime().toString("yyyy/MM/dd hh:mm:ss");
m_pLabel->setText(qstr_time);
}
QMainWindow::timerEvent(event);
}
main.cpp:
cpp
#include "imainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
IMainWindow w;
w.show();
return a.exec();
}
-【End】-
喜欢本文章,记得点赞、分享、关注哦~