概念介绍:
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调整宽度和高度,这样按钮就实现了自由调整大小的目的。