您当前的位置: 首页 >  ar

令狐掌门

暂无认证

  • 0浏览

    0关注

    513博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

QMainWindow statusBar如何添加控件

令狐掌门 发布时间:2022-02-25 22:39:02 ,浏览量:0

在使用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.

关注
打赏
1652240117
查看更多评论
立即登录/注册

微信扫码登录

0.0659s