Qt界面中的status bar

在mainwindow.cpp文件中,有槽函数定义:MainWindow::on_connectButton_clicked()。
其中对于状态栏的操作有:
statusBar()->clearMessage();
statusBar()是什么?
打开mainwindow.h头文件,并没有发现mainwindow类中有statusBar()函数定义。
按住Ctrl+点击statusBar(),跳转到statusbar的最初定义,在qmainwindow.h文件中。

class Q_WIDGETS_EXPORT QMainWindow : public QWidget
{
.
.
.
public:
#ifndef QT_NO_STATUSBAR
    QStatusBar *statusBar() const;
    void setStatusBar(QStatusBar *statusbar);
#endif
.
.
.
}

可以看出,QMainWindow 类public自 QWidget类,statusBar() 函数返回一个QStatusBar类型的指针。
而MainWindow类继承自QMainWindow类:
class MainWindow : public QMainWindow。
综上,MainWindow 类的statusBar() 函数继承自爷爷QWidget类的公有函数。
一个类里面的函数可以随便互相调用,所以MainWindow::on_connectButton_clicked()中调用了statusBar() 函数。
那MainWindow类的statusBar() 如何与UI的statusBar指针变量关联的呢?

使用qt设计界面编译后,生成的ui_mainwindow.h文件中有ui_mainwindow类的定义,其中包含QStatusBar *statusBar指针变量。

class Ui_MainWindow
{
public:
...
    QStatusBar *statusBar;
...
}

MainWindow变量初始化,同时创建一个ui_mainwindow类的变量ui,

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , **ui(new Ui::MainWindow)**
    , lastRequest(nullptr)
    , modbusDevice(nullptr)
{
    ui->setupUi(this);
}

查看 void setupUi(QMainWindow *MainWindow)函数定义,有以下语句:

statusBar = new QStatusBar(MainWindow);//创建一个QStatusBar实体,初始化statusBar 指针,父物件为MainWindow.
statusBar->setObjectName(QStringLiteral("statusBar"));//命名
MainWindow->setStatusBar(statusBar);//为mainwindow实体添加statusbar.

通过ui实体与MainWindow实体互相地作为形参传递,将属于ui的statusbar指针添加到了MainWindow实体。
所以,MainWindow::on_connectButton_clicked()中,既可以使用
statusBar()->clearMessage();
也可以使用
ui->statusBar->clearMessage();
利用这种方法,本类函数中,别的类通过传递形参this,可以操作影响本类,甚至将别类的成员变量为自己所用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值