原创文章,欢迎转载。转载请注明:转载自 祥的博客
原文链接:https://cloud.tencent.com/developer/article/1596462
- @[toc]1.效果2.代码h文件cpp文件ui文件生成的h文件3.扩展
添加多个状态栏QStatusBar
一般情况下,只有1个状态栏
,在窗口的最下面。但是我想在上面设计第2个状态栏
,就只能用代码自己实现。
在最下面用一个QHBoxLayout
的空间(hLayout_StatusBar2
)来装第2个状态栏
。
默认的QStatusBar
是stBar
(假设叫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
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;
//状态栏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_mainsatustest.h
/********************************************************************************
** 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
Qt的Layout边缘空白调整: https://cloud.tencent.com/developer/article/1596459
Qt状态栏QStatusBar使用: https://cloud.tencent.com/developer/article/1596465
Qt用QPainter设计电池充电控件(百分比,自定义文字显示):
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有