Qt学习笔记(2)——Qt状态栏——QStatusBar

状态栏位于主窗口的最下方,提供一个显示工具提示等信息的地方。一般地,当窗口不是最大化的时候,状态栏的右下角会有一个可以调节大小的控制点;当窗口最大化的时候,这个控制点会自动消失。Qt 提供了一个 QStatusBar 类来实现状态栏。

QMainWindow 里默认的StatusBar()与setStatusBar()函数

QMainWindow 类里面就有一个 statusBar()函数,用于实现状态栏的调用。类似menuBar()函数,如果不存在状态栏,该函数会自动创建一个,如果已经创建则会返回这个状态栏的指针。如果你要替换掉已经存在的状态栏,需要使用 QMainWindow 的 setStatusBar()函数。

在 Qt 里面,状态栏显示的信息有三种类型:临时信息、一般信息和永久信息。

1.临时信息

临时显示的信息,比如 QAction 的提示等,也可以设置自己的临时信息,比如程序启动之后显示 Ready,一段时间后自动消失——这个功能可以使用 QStatusBar 的 **showMessage()**函数来实现;

2.一般信息

一般信息可以用来显示页码之类的;

3.永久信息

永久信息是不会消失的信息,比如可以在状态栏提示用户 Caps Lock 键被按下之类。

QStatusBar继承自QWidget

QStatusBar 继承自 QWidget,因此它可以添加其他的 QWidget。下面我们在 QStatusBar 上添加一个 QLabel。

首先在 class 的声明中添加一个私有的 QLabel 属性:

private: 
        QAction *openAction; 
        QLabel *msgLabel;

然后在其构造函数中添加:

      msgLabel = new QLabel; 
        msgLabel->setMinimumSize(msgLabel->sizeHint()); 
        msgLabel->setAlignment(Qt::AlignHCenter); 

        statusBar()->addWidget(msgLabel);

第一行创建一个 QLabel 的对象,然后设置最小大小为其本身的建议大小——注意,这样设置之后,这个最小大小可能是变化的——最后设置显示规则是水平居中(HCenter)。

最后一行使用 statusBar()函数将这个 label 添加到状态栏。编译运行,将鼠标移动到工具条或者菜单的QAction上,状态栏就会有相应的提示:

Qt学习笔记(2)——Qt状态栏——QStatusBar_第1张图片

如何使状态栏边框消失

但是 当没有任何提示时,状态栏会有一个短短的竖线:

其实,这是 QLabel 的边框。当没有内容显示时,QLabel 只显示出自己的一个边框。但是,很多情况下我们
并不希望有这条竖线,于是,我们对 statusBar()进行如下设置:

statusBar()->setStyleSheet(QString("QStatusBar::item{border: 0px}"));

简单来说,就是把 QStatusBar 的子组件的 border 设置为0,也就是没有边框

如何使状态栏右下角控制点消失

QStatusBar 右下角的大小控制点可以通过setSizeGripEnabled()函数来设置是否存在

由于 QStatusBar 可以添加多个 QWidget,因此,我们可以构建出很复杂的状态栏。

全部代码

QtGuiApplication1.h
#ifndef QtGuiApplication1_H 
#define QtGuiApplication1_H 

#include 
#include "ui_QtGuiApplication1.h"

			class QAction;//QAction 类的前向声明
			class QLabel;

class QtGuiApplication1 : public QMainWindow
{
	Q_OBJECT

public:
	QtGuiApplication1(QWidget *parent = Q_NULLPTR);

private:
	Ui::QtGuiApplication1Class ui;

			QAction* openAction;//打开命令
			QLabel* msgLabel;

private slots:
			void open();//openAction的事件 Action-Slots
	            //为 QAction 添加事件响应。
	            //点击 QAction 会发出 triggered()信号,
	            //因此声名一个 slot,然后 connect 这个信号。

};

#endif // MAINWINDOW_H
QtGuiApplication1.cpp
#include "QtGuiApplication1.h"
#include  
#include  
#include  
#include  
#include  
#include 
#include 


QtGuiApplication1::QtGuiApplication1(QWidget *parent)
	: QMainWindow(parent)
{

    //---------------------------------------------------------openAction--------------

    openAction = new QAction(tr("&Open"), this); 

    openAction->setShortcut(QKeySequence::Open);


    openAction->setStatusTip(tr("Open a file.")); 
     
    openAction->setIcon(QIcon(":/QtGuiApplication1/Resources/open.png"));

    //链接
    connect(openAction, SIGNAL(triggered()), this, SLOT(open()));


    //---------------------------------------------------状态栏msgLabel--------- //please include first #include 
    msgLabel = new QLabel;
    msgLabel->setMinimumSize(msgLabel->sizeHint()); // 建议大小
    msgLabel->setAlignment(Qt::AlignHCenter);//显示规则是水平居中(HCenter)

    statusBar()->addWidget(msgLabel);//加到界面里


//-----------------------------------------------------------菜单栏QMenu-----------------------
    
    QMenu* file = menuBar()->addMenu(tr("&File"));//QMainWindow 有一个 menuBar()函数,会返回菜单栏,也就是最上面的那一条。 #include  #include  
    //如果不存在会自动创建,如果已经存在就返回那个菜单栏的指针。
    //直接使用返回值添加一个菜单,也就是 addMenu,参数是一个 QString,也就是显示的菜单名字。


    file->addAction(openAction);//然后使用这个 QMenu 指针添加这个 QAction。 

//------------------------------------------------------------工具栏QToolBar---------------
    QToolBar* toolBar = addToolBar(tr("&File"));//使用addToolBar 函数的返回值添加了一个工具条,并且把这个 QAction 添加到了上面。 #include  
    toolBar->addAction(openAction);


	//ui.setupUi(this);
}

//Slot槽里的实现写在这里

void QtGuiApplication1::open()
{
    QMessageBox::information(NULL, tr("Open"), tr("Open a file")); //Please add #include 
}

你可能感兴趣的:(Qt)