前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Qt]添加多个状态栏QStatusBar

[Qt]添加多个状态栏QStatusBar

作者头像
祥知道
发布2020-03-10 16:43:43
2.5K0
发布2020-03-10 16:43:43
举报
文章被收录于专栏:祥的专栏

原创文章,欢迎转载。转载请注明:转载自 祥的博客

原文链接:https://cloud.tencent.com/developer/article/1596462


文章目录

代码语言:txt
复制
- @[toc]1.效果2.代码h文件cpp文件ui文件生成的h文件3.扩展

添加多个状态栏QStatusBar

1.效果

一般情况下,只有1个状态栏,在窗口的最下面。但是我想在上面设计第2个状态栏,就只能用代码自己实现。

在最下面用一个QHBoxLayout的空间(hLayout_StatusBar2)来装第2个状态栏

默认的QStatusBarstBar(假设叫m_stBar1),新建了一个QStatusBar(假设叫m_stBar2),将其放在hLayout_StatusBar2的位置(使用ui.hLayout_StatusBar2->addWidget(m_stBar2);)。

获取m_stBar1的高度,将m_stBar2的高度设置的和m_stBar1一样高(m_stBar2->setFixedHeight(m_stBar1->size().height());),但是注意,对于两个Layout,必须要把边缘设置为0,不然会很难看(状态栏不能对齐)

主要需要设置边缘的的是两个Layout,一个是放置状态栏2的hLayout_StatusBar2,另一个是中央Layout:我这里是verticalLayout_3,这个中央Layout需要自己去XXX.ui文件生成的ui_XXX.h找一下,非常好找,详细可以我看这篇博文:

Qt的Layout边缘空白调整: https://cloud.tencent.com/developer/article/1596459

2.代码

h文件

代码语言:javascript
复制
private:
	Ui::MainSatusTestClass ui;
	LedLabel* m_status1;
	LedLabel* m_status2;
	LedLabel* m_status3;
	LedLabel* m_status4;
	LedLabel* m_status5;

	QStatusBar* m_stBar1;
	QStatusBar* m_stBar2;

cpp文件

代码语言:javascript
复制
//状态栏1 - 默认状态栏
m_stBar1 = ui.stBar;//为了使用方便,直接用统一的指针调用
m_stBar2 = new QStatusBar(this);//自己新建的状态栏
m_stBar1->addPermanentWidget(m_status1);//永久信息窗口 - 不会被一般消息覆盖
m_stBar1->addWidget(m_status2);//正常信息窗口 - 会被showMessage()的消息覆盖


m_stBar1->setSizeGripEnabled(false);//去掉状态栏右下角的三角

//状态栏2 - 自己新建的状态栏
/*
	让中央Layout"左","右","下"边距为0
	目的是为了让StatusBar2看起来和StatusBar1一样(头尾对齐,没有边距)
	*/
ui.verticalLayout_3->setContentsMargins(0, 11, 0, 0);//设置中央Layout
ui.hLayout_StatusBar2->addWidget(m_stBar2);
ui.hLayout_StatusBar2->setContentsMargins(0,0,0,0);//放置的Layout边距设置

m_stBar2->setFixedHeight(m_stBar1->size().height());
m_stBar2->addWidget(m_status3);
m_stBar2->addWidget(m_status4);
m_stBar2->addWidget(m_status5);

ui文件生成的h文件

ui_mainsatustest.h

代码语言:javascript
复制
/********************************************************************************
** Form generated from reading UI file 'mainsatustest.ui'
**
** Created by: Qt User Interface Compiler version 5.5.0
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef UI_MAINSATUSTEST_H
#define UI_MAINSATUSTEST_H

#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QHBoxLayout>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QStatusBar>
#include <QtWidgets/QToolBar>
#include <QtWidgets/QVBoxLayout>
#include <QtWidgets/QWidget>

QT_BEGIN_NAMESPACE

class Ui_MainSatusTestClass
{
public:
    QWidget *centralWidget;
    QVBoxLayout *verticalLayout_3;
    QVBoxLayout *vLayout_Bottom;
    QPushButton *btn_color;
    QPushButton *btn_txt;
    QPushButton *btn_Battery;
    QVBoxLayout *vLayout_Battery;
    QHBoxLayout *hLayout_StatusBar2;
    QMenuBar *menuBar;
    QToolBar *mainToolBar;
    QStatusBar *stBar;

    void setupUi(QMainWindow *MainSatusTestClass)
    {
        if (MainSatusTestClass->objectName().isEmpty())
            MainSatusTestClass->setObjectName(QStringLiteral("MainSatusTestClass"));
        MainSatusTestClass->resize(95, 213);
        centralWidget = new QWidget(MainSatusTestClass);
        centralWidget->setObjectName(QStringLiteral("centralWidget"));
        verticalLayout_3 = new QVBoxLayout(centralWidget);
        verticalLayout_3->setSpacing(6);
        verticalLayout_3->setContentsMargins(11, 11, 11, 11);
        verticalLayout_3->setObjectName(QStringLiteral("verticalLayout_3"));
        vLayout_Bottom = new QVBoxLayout();
        vLayout_Bottom->setSpacing(6);
        vLayout_Bottom->setObjectName(QStringLiteral("vLayout_Bottom"));
        btn_color = new QPushButton(centralWidget);
        btn_color->setObjectName(QStringLiteral("btn_color"));

        vLayout_Bottom->addWidget(btn_color);

        btn_txt = new QPushButton(centralWidget);
        btn_txt->setObjectName(QStringLiteral("btn_txt"));

        vLayout_Bottom->addWidget(btn_txt);

        btn_Battery = new QPushButton(centralWidget);
        btn_Battery->setObjectName(QStringLiteral("btn_Battery"));

        vLayout_Bottom->addWidget(btn_Battery);

        vLayout_Battery = new QVBoxLayout();
        vLayout_Battery->setSpacing(6);
        vLayout_Battery->setObjectName(QStringLiteral("vLayout_Battery"));

        vLayout_Bottom->addLayout(vLayout_Battery);


        verticalLayout_3->addLayout(vLayout_Bottom);

        hLayout_StatusBar2 = new QHBoxLayout();
        hLayout_StatusBar2->setSpacing(6);
        hLayout_StatusBar2->setObjectName(QStringLiteral("hLayout_StatusBar2"));
        hLayout_StatusBar2->setSizeConstraint(QLayout::SetFixedSize);

        verticalLayout_3->addLayout(hLayout_StatusBar2);

        MainSatusTestClass->setCentralWidget(centralWidget);
        menuBar = new QMenuBar(MainSatusTestClass);
        menuBar->setObjectName(QStringLiteral("menuBar"));
        menuBar->setGeometry(QRect(0, 0, 95, 23));
        MainSatusTestClass->setMenuBar(menuBar);
        mainToolBar = new QToolBar(MainSatusTestClass);
        mainToolBar->setObjectName(QStringLiteral("mainToolBar"));
        MainSatusTestClass->addToolBar(Qt::TopToolBarArea, mainToolBar);
        stBar = new QStatusBar(MainSatusTestClass);
        stBar->setObjectName(QStringLiteral("stBar"));
        MainSatusTestClass->setStatusBar(stBar);

        retranslateUi(MainSatusTestClass);

        QMetaObject::connectSlotsByName(MainSatusTestClass);
    } // setupUi

    void retranslateUi(QMainWindow *MainSatusTestClass)
    {
        MainSatusTestClass->setWindowTitle(QApplication::translate("MainSatusTestClass", "MainSatusTest", 0));
        btn_color->setText(QApplication::translate("MainSatusTestClass", "\347\212\266\346\200\201\346\240\217Color", 0));
        btn_txt->setText(QApplication::translate("MainSatusTestClass", "\347\212\266\346\200\201\346\240\217Msg", 0));
        btn_Battery->setText(QApplication::translate("MainSatusTestClass", "\346\224\271\345\217\230\347\224\265\346\261\240", 0));
    } // retranslateUi

};

namespace Ui {
    class MainSatusTestClass: public Ui_MainSatusTestClass {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_MAINSATUSTEST_H

3.扩展

Qt的Layout边缘空白调整: https://cloud.tencent.com/developer/article/1596459

Qt状态栏QStatusBar使用: https://cloud.tencent.com/developer/article/1596465

Qt用QPainter设计电池充电控件(百分比,自定义文字显示):

https://cloud.tencent.com/developer/article/1596461

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 1.效果
  • 2.代码
    • h文件
      • cpp文件
        • ui文件生成的h文件
        • 3.扩展
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档