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

Can I use '->' operator to access an object pointer by an pointers?

本文关键字:指针 访问 对象 可以使 我可以 gt 运算符      更新时间:2023-10-16

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

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

我知道我们可以使用->运算符来允许指针访问类的成员。在这种情况下,pushButton->setText("Hello"),但我就是不明白ui->pushButton的含义,我搜索了一些答案解释ui持有pushButton的参考,但是这怎么做呢? pushButton是指向对象的指针,不是类的成员,我们可以使用->将对象地址放到ui指针上吗?

对不起,我的英语不好,我可能会让你感到困惑。我希望有人能给我一个明确的解释,提前谢谢。

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

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

下面是自动生成ui的示例:

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

ui是一个Ui_MainWindow *,因此您可以使用其上的->来访问Ui_MainWindow类的成员,例如pushButton

pushButton是一个QPushButton *,因此您可以使用其上的->来访问QPushButton类的成员,例如setText()

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

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

一些更正:

->不允许指针执行:)

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

请参阅:运算符。

最后,您应该阅读一个类似的问题。

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

使用"arrow"运算符基本上只是取消引用(一元*)和点(.)成员访问运算符的语法糖。

所以声明

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

也可以写成

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