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

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:

#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:

#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:

#include "imainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    IMainWindow w;
    w.show();
    return a.exec();
}

-【End】-

#想了解更多精彩内容,关注下方公众号,还有示例源码、开发工具免费下载。

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

  • 18
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天恩软件工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值