在Qt5開發及實例中,給出的第一個例子中有一點讓人很懵,通過自學和查看網上資料,最後終於自認爲搞明白了,現在向大家報告!
問題代碼:
#include <QDialog>
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);
~Dialog();
private slots:
void on_countBtn_clicked();
private:
Ui::Dialog *ui;
};
其中,在命名空間Ui中聲明的Dialog類在其後的定義中,定義了一個私有指針變量ui,這個ui在隨後的cpp文檔中有ui->areaLabel_2->setText(tempStr.setNum(area))的調用。對ui的成員變量是從何而來的很費解,有木有。網上有說的太複雜,看不懂,有一個其實說的挺對的,但是講得有點簡單,也感覺有點雲裏霧裏。後面經過研究,發現:class Dialog採用了多繼承的方法。namespace Ui中的class Dialog既繼承自QDialog.h中的class QDialog, 又繼承於Ui_Dialog.h中的class Ui_Dialog {}。其中,Ui_Dialog.h在dialog.cpp文件開頭被引用。
#include "dialog.h"
#include "ui_dialog.h"
在Ui_Dialog.h中,有
……
class Ui_Dialog
{
……
}
namespace Ui {
class Dialog: public Ui_Dialog {};
} // namespace Ui
再有,就是關於命名空間使用的問題,想必大家看下下面這個鏈接就能明白了。C++命名空間
好了,到這裏各位就明白了吧。謝謝觀看!