【Qt开发笔记】Qt实现在QWidget中添加QStatusBar并显示控件的Status Tip

1.新建QWidget

新建一个QWidget,通过Qt Designer在界面中添加四个按钮,并取名pushButton_1、pushButton_2、pushButton_3和pushButton_4。

【Qt开发笔记】Qt实现在QWidget中添加QStatusBar并显示控件的Status Tip_第1张图片

2.添加QStatusBar

QStatusBar是QMainWindow中自带的,在Qt Designer中QMainWindow可以通过右键菜单添加或移除QStatusBar,但是QWidget默认中并没有带有QStatusBar,需要手动添加,在自定义的QWidget界面类中新建一个QStatusBar类型的指针成员变量m_statusBar。

private:
    QStatusBar *m_statusBar;

并将m_statusBar添加到自定义QWidget类界面的布局器中。

m_statusBar = new QStatusBar(this);
layout()->addWidget(m_statusBar);

3.重写eventFilter事件过滤函数

这个时候我们就需要重写QWidget界面类的事件过滤函数eventFilter。

bool Widget::eventFilter(QObject *obj, QEvent *event)
{
    // 建议在控件较多的情况下自定义一个控件基类的派生类
    // 并在控件的派生类中去实现eventFilter函数,避免过多的if else判断
    
    if (event->type() == QEvent::HoverEnter) {
        QString objName = obj->objectName();
        if (objName == "pushButton_1")
            m_statusBar->showMessage("This is a button A");
        else if (objName == "pushButton_2")
            m_statusBar->showMessage("This is a button B");
        else if (objName == "pushButton_3")
            m_statusBar->showMessage("This is a button C");
        else if (objName == "pushButton_4")
            m_statusBar->showMessage("This is a button D");
        else
            m_statusBar->showMessage("");
    }
    else if (event->type() == QEvent::HoverLeave) {
        m_statusBar->showMessage("");
    }
    else {

    }

    return QWidget::eventFilter(obj, event);
}

4.对控件安装事件过滤器

在自定义QWidget界面类的构造函数中对界面中的控件安装事件过滤器,即调用控件的installEventFilter函数,并传入自定义QWidget界面类的this指针。

// 这里同上,避免过多繁琐的依次调用控件的installEventFilter函数
// 建议在控件较多的情况下自定义一个控件基类的派生类
// 在派生类的构造函数中去调用installEventFilter函数

ui->pushButton_1->installEventFilter(this);
ui->pushButton_2->installEventFilter(this);
ui->pushButton_3->installEventFilter(this);
ui->pushButton_4->installEventFilter(this);

5.Run

调试运行可看到效果,当鼠标指针在按钮控件中移动时,可以在下方的状态栏中看到输出的字符串信息。

【Qt开发笔记】Qt实现在QWidget中添加QStatusBar并显示控件的Status Tip_第2张图片

【Qt开发笔记】Qt实现在QWidget中添加QStatusBar并显示控件的Status Tip_第3张图片

当鼠标指针移除控件外,讲不再显示任何信息。

【Qt开发笔记】Qt实现在QWidget中添加QStatusBar并显示控件的Status Tip_第4张图片

这里的效果就达到了QMainWindow中的QStatusBar状态栏的效果了。

6.编程建议

最简单的方法就是新建一个派生QMainWindow类的自定义界面类,隐藏掉菜单栏和工具栏,控件只需要设置调用setStatusTip设置Status Tip就可以达到这样的效果。

还有个就是在控件较多的情况下,避免自定义界面类在重写eventFilter函数时过多的使用if else判断控件的object name的情况,以及自定义界面类在构造函数中依次调用控件的installEventFilter函数而造成的代码冗长,建议自定义一个控件基类的派生类,在派生类的构造函数中去调用installEventFilter函数以及派生类中去重写eventFilter函数。

你可能感兴趣的:(【Qt开发笔记】,Qt,QWidget,QStatusBar)