在使用Qt开发客户端时,有时需要在底部状态栏显示一些信息,但是默认的statusBar并不能满足需求,此时,我们可以在statusBar上添加自定义控件,实现相应需求。 可以去看看QStatusBar的声明,代码如下:
class Q_WIDGETS_EXPORT QStatusBar: public QWidget
{
Q_OBJECT
Q_PROPERTY(bool sizeGripEnabled READ isSizeGripEnabled WRITE setSizeGripEnabled)
public:
explicit QStatusBar(QWidget *parent = nullptr);
virtual ~QStatusBar();
void addWidget(QWidget *widget, int stretch = 0);
int insertWidget(int index, QWidget *widget, int stretch = 0);
void addPermanentWidget(QWidget *widget, int stretch = 0);
int insertPermanentWidget(int index, QWidget *widget, int stretch = 0);
void removeWidget(QWidget *widget);
void setSizeGripEnabled(bool);
bool isSizeGripEnabled() const;
QString currentMessage() const;
public Q_SLOTS:
void showMessage(const QString &text, int timeout = 0);
void clearMessage();
Q_SIGNALS:
void messageChanged(const QString &text);
protected:
void showEvent(QShowEvent *) override;
void paintEvent(QPaintEvent *) override;
void resizeEvent(QResizeEvent *) override;
void reformat();
void hideOrShow();
bool event(QEvent *) override;
private:
Q_DISABLE_COPY(QStatusBar)
Q_DECLARE_PRIVATE(QStatusBar)
};
QStatusBar派生于QWidget, 其提供了如下方法:
- addWidget:添加widget, 第二个参数表示是否拉伸,那么,该函数可以传入一切QWidget及其子类,例如QLabel、QPushButton、QWidget等;
- insertWidget:插入widget
- currentMessage: 获取当前显示的消息
- 信号messageChanged:显示的内容改变时会除法该信号
下面的代码将演示如何在statusBar上添加3个Label控件, 新建一个基于QMainWindow的项目. mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
#include
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
QLabel* pLabel1_ = nullptr;
QLabel* pLabel2_ = nullptr;
QLabel* pLabel3_ = nullptr;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
pLabel1_ = new QLabel(u8"标签1:");
pLabel1_->setMinimumWidth(200);
statusBar()->addWidget(pLabel1_);
pLabel2_ = new QLabel(u8"标签2:");
pLabel2_->setMinimumWidth(200);
statusBar()->addWidget(pLabel2_);
pLabel3_ = new QLabel(u8"标签3:");
pLabel3_->setMinimumWidth(200);
statusBar()->addWidget(pLabel3_);
}
MainWindow::~MainWindow()
{
delete ui;
}
运行效果
可以看到在状态栏上添加了3个label, 调用addWidget即可实现,如果需要拉伸控件,则把第二个参数设为1.