我可以使用' - >'运算符通过指针访问对象指针?

时间:2016-07-16 06:25:52

标签: c++ qt pointers

我刚刚开始使用Qt教程,而且我也是C ++的初学者。在Qt教程中,有一个使用语句设置按钮文本的示例:

ui->pushButton->setText("Hello");

我知道我们可以使用->运算符来允许指针访问类的成员。在这种情况下,pushButton->setText("Hello"),但我只是不理解ui->pushButton的含义,我搜索了一些答案,解释说ui持有pushButton的引用,但是如何做到这一点? pushButton是指向对象的指针,不是类的成员,我们可以使用->将对象地址放到ui指针中吗?

抱歉我的英语不好,我可能会困惑你。我希望有人能提前给我一个明确的解释。

2 个答案:

答案 0 :(得分:8)

ui指针是使用QT Creator的表单编辑器创建的xml生成的。

您可以在输出目录中找到自动生成的头文件。例如,主窗口有ui_mainwindow.h。运行qmake后会创建此文件。如果您使用QT Creator,则会自动完成。

以下是自动生成的ui

的示例
class Ui_MainWindow
{
public:
    QWidget *centralWidget;
    QPushButton *pushButton;
    QMenuBar *menuBar;
    QToolBar *mainToolBar;
    QStatusBar *statusBar;
    ...
};

uiUi_MainWindow *,因此您可以使用->来访问Ui_MainWindow类的成员,例如pushButton

pushButtonQPushButton *,因此您可以使用->来访问QPushButton类的成员,例如setText()

ui->pushButton->setText("Hello")等同于:

Ui_MainWindow * ui = new Ui_MainWindow;
...
QPushButton * btn = ui->pushButton;
btn->setText("Hello");

一些更正:

->不允许指针执行操作:)

->只是一个访问 struct 成员的运算符,必​​须应用于指针。如果您有实例,则必须使用.运算符来访问成员。

请参阅:operators

最后你应该阅读similar question

答案 1 :(得分:3)

"箭头" operator ->用于取消引用指向对象的指针以获取其成员。因此,如果您在变量ui中有一个指针,并且该对象具有成员pushButton,那么您可以使用ui->pushButton来访问pushButton成员。如果pushButton成员依次是指向对象的指针,那么您再次使用->来访问其成员,例如ui->pushButton->setText("Hello")

使用"箭头" operator基本上只是解除引用(一元*)和点(.)成员访问运算符的语法糖。

所以声明

ui->pushButton->setText("Hello");

也可以写成

(*(*ui).pushButton).setText("Hello");