我目前在QT工作,最近我注意到一些让我真正困惑的事情。据我所知,通常情况下,当我们想要创建指针时,我们必须使用C++中的以下语法:
int number = 10;
int* pNumber = &number;
(或类似的东西)
我想创建一个指向在QT设计中创建的按钮的指针。这只是为了测试的目的。(我是QT和C++的新手,所以我想测试一下)
但后来我注意到一些奇怪的事情,我无法理解。由于某种原因,当我创建名为“Button”的“opushButton”类型的指针时,我不必在“(*UI).PushButton_5”语法中使用“&”。(pushButton_5是我的ui中我的按钮的名称)
代码工作了,文本“5”被添加到我的qt中的“lineedit”中。这是怎么工作的?我是不是漏了点什么?
下面是我的代码:
MainWindow.cpp:
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QPushButton* button = (*ui).pushButton_5;
ui->lineEdit->setText((*button).text());
}
MainWindow::~MainWindow()
{
delete ui;
}
MainWindow.h:
#define MAINWINDOW_H
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
&
不是创建指针的方法,而是获取指向您可以访问的特定事物的指针的方法。
如果别人告诉您一个东西在哪里,您就不需要&
的帮助来找出。
void g(int* q)
{
int* p = q; // 'q' is the location of some unknown 'int', and so is `p`.
}
如果您有一个东西并且想知道那个东西在哪里,您需要&
。
void f()
{
int x = 5;
int* p = &x; // The location of 'x'.
g(&x); // Pass the location of 'x' to 'g'.
}
此外,我们通常编写x->y
而不是(*x).y
。
如果您查看多个间接级别,则此约定很有意义-将x->y->z->w
与(*(*x).y).z).w
进行比较。