我是Qt5的新手,我正在學習QWidgets來開發應用程序。爲什麼QWidgets通過指針訪問?
我注意到在很多例子中,QWidgets幾乎總是被指針訪問。例如:
#include <QApplication>
#include <QWidget>
#include <QFrame>
#include <QGridLayout>
class Cursors : public QWidget {
public:
Cursors(QWidget *parent = 0);
};
Cursors::Cursors(QWidget *parent)
: QWidget(parent) {
QFrame *frame1 = new QFrame(this);
frame1->setFrameStyle(QFrame::Box);
frame1->setCursor(Qt::SizeAllCursor);
QFrame *frame2 = new QFrame(this);
frame2->setFrameStyle(QFrame::Box);
frame2->setCursor(Qt::WaitCursor);
QFrame *frame3 = new QFrame(this);
frame3->setFrameStyle(QFrame::Box);
frame3->setCursor(Qt::PointingHandCursor);
QGridLayout *grid = new QGridLayout(this);
grid->addWidget(frame1, 0, 0);
grid->addWidget(frame2, 0, 1);
grid->addWidget(frame3, 0, 2);
setLayout(grid);
}
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
Cursors window;
window.resize(350, 150);
window.setWindowTitle("Cursors");
window.show();
return app.exec();
}
這是從教程採取:http://zetcode.com/gui/qt5/firstprograms/
然而,在同一頁上,我看到,我們可以通過它的對象本身訪問QWidget的基類:
#include <QApplication>
#include <QWidget>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QWidget window;
window.resize(250, 150);
window.setWindowTitle("Simple example");
window.show();
return app.exec();
}
爲什麼需要通過指針訪問所有QWidget派生類?爲什麼沒有必要通過指針訪問QWidget本身?
兩者都不是必要的。在類方法中創建局部變量可能會更容易,而不是聲明一堆只會訪問一次的成員變量。既然你需要小部件在方法範圍之外生存,你可以用'new'來初始化它們。請參閱[對象樹和所有權](http://doc.qt.io/qt-5/objecttrees.html)。 – thuga