Qt6.5示例:QMainWindow集成QStatusBar状态栏

欢迎关注公众号(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】-

喜欢本文章,记得点赞、分享、关注哦~