我可以使用"->"运算符通过指针访问对象指针吗?
Can I use '->' operator to access an object pointer by an pointers?
我刚刚开始一个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");
- 通过指向指针数组的指针访问子类的属性
- 使用指针访问数组中的对象数据成员
- 无法通过指针访问对象的成员
- decltype:使用指针访问类的静态成员
- 是否可以使用指针访问变量以避免直接编辑变量?
- 为什么 C++ 地址中的矢量无法通过原始指针访问
- 使用指针访问数组元素时出现意外结果
- 使用指针访问数组的值
- C++继承从基类指针访问派生类中的非虚拟函数
- 如何使用指针访问成对向量的元素
- 为什么有些库提供无指针访问,而另一些库则不提供
- 如何通过引用或指针访问二维矢量
- 使用指针访问参数接收的结构中的元素时内存泄漏
- 我正在学习C++,我不能使用指针访问参考吗?(举个例子)
- 复制堆栈上的成员值或使用指针访问它?
- C++娜娜 如何从全局列表框*指针访问列表框内的索引 0 上的按钮?
- 通过此指针访问时的成员差异和自身的成员指针(简单的 QT 示例问题)
- 从指针访问 Kaguya Lua 状态
- 说明通过指针访问非静态类成员函数
- 有没有办法使用初始化到第一行的指针访问 2d 数组的第二行?