QStatusbar使用方法

概念介绍:

QStatusbar是qt提供的一种状态显示控件,一般与QMainwindow类使用,QMainwindow类提供了setStatusBar接口可以快捷的添加QStatusbar对象。说到这里就会产生QStatusbar对象有什么用呢?,想到QStatusbar我就会想到桌面的状态栏,右侧显示一些按钮或者显示类控件内,左侧可以进行信息显示,这就是我理解的QStatusbar功能。

QStatusbar作为一个显示类控件,具有一定的规则:

  • 可以显示临时信息,并且设置显示时间,需要注意的是临时信息总是显示在左侧
  • 可以显示普通信息,该信息可以被临时信息覆盖,使用时尤其注意这个问题,普通信息或者控件分布在左侧,依次分布,每新增一个普通控件,则按照增加的顺序依次从左向右新增
  • 永久显示的信息,该信息不会被临时信息覆盖,且分布于QStatusbar的右侧依次排列,每新增一个永久控件,按照增加的顺序从右往左依次新增

使用场景:

一般与QMainwindow组合使用,作为一个主界面的状态栏使用,可以在QStatusbar上增加一些控件,用于操作,显示信息等。

重要接口:

void QStatusBar::addWidget(QWidget *widget, int stretch = 0) //新增普通控件,该控件新增后位于statusbar的左侧。
void QStatusBar::addPermanentWidget(QWidget *widget, int stretch = 0);//新增永久控件,新增后位于statusbar的右侧。
int QStatusBar::insertPermanentWidget(int index, QWidget *widget, int stretch = 0);//插入到右侧指定索引位置
int QStatusBar::insertWidget(int index, QWidget *widget, int stretch = 0);//插入到左侧指定索引位置
void QStatusBar::showMessage(const QString &message, int timeout = 0);//显示临时信息,该接口可以设置显示的时间。

上述接口中大部分都存在stretch的参数,这个参数的含义可以理解为比例的意思,如果该参数为0,则表示statusbar会按照最小的方式设置widget的大小和位置;如果不为0,则可以理解为比例的意思(如果对qt中布局管理器中的一个属性比较熟悉的话,则很容易理解)。举个例子,如果新增两个永久控件,新增控件1时stretch参数为1,新增控件2时stretch参数为2,那么显示后的效果控件1和控件2 的大小比例为1:2。

实例:

 QStatusBar* statusbar = new QStatusBar(this);
    //statusbar->setGeometry(QRect(0,960,1920,120));
    QPushButton* home = new QPushButton(statusbar);
    //home->setGeometry(QRect(900, 0,100,50));
    home->setText("HOME");
    statusbar->addPermanentWidget(home,0);
    statusbar->show();
    QPushButton* mulPageBtn = new QPushButton;
    mulPageBtn->setText("页面浏览");
    statusbar->addPermanentWidget(mulPageBtn,0);
    statusbar->setStyleSheet("  QStatusBar {   \
                             background: brown;  \
                         } \
                         QStatusBar::item {  \
                             border: 1px solid red; \
                             border-radius: 3px; \
                         }");
    this->setStatusBar(statusbar);
    QLabel* pageName = new QLabel;
    pageName->setText("");
    pageName->setAlignment(Qt::AlignCenter);
    statusbar->addWidget(pageName,5);
    QLabel* spaceHolder = new QLabel;
    spaceHolder->setText("主界面");
    spaceHolder->setAlignment(Qt::AlignCenter);
    statusbar->addWidget(spaceHolder,1);

    statusbar->showMessage("Ready!");

效果图:

遇到的问题:

在实际开发过程中遇到了这样一个问题,在QStatusBar中新增一个QPushButton,但是显示后的QPushButton总是特别小,然后拖入了一个QLabel类,发现QLabel对象显示是正常的,那问题出在哪里呢?如何实现在QStatusBar中自由的定制控件的大小呢?

首先给答案,这里QPushButton对象显示不正常的原因是QPushButton的默认QSizePolicy导致的,QPushButton默认的sizepolicy水平策略是QSizePolicy::Minimum,垂直策略是QSizePolicy::Fixed,故在这种策略下按钮的显示就是会显示的比较怪异,水平显示最小,垂直显示固定高度,所以按钮显的特别小

讲到这里另外一个问题的答案也出来了,如果我们需要调整QStatusBar中某个widget的大小,可以通过调整该widget的QSizePolicy来实现,还是以上面的按钮为例,我要设置一个固定宽度和高度的按钮,那么首先就要修改该按钮的QSizePolicy水平和垂直均为QSizePolicy::Fixed,然后再进行调用接口setFixedHeight和setFixedWidth调整宽度和高度,这样按钮就实现了自由调整大小的目的。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值