class Widget 里面有個聲明 Ui::Widget *ui,這個 ui 是使用 namespace Ui 里的 Widget 類聲明的,該類只是簡單的繼承了 ui_widget.h 里的 Ui_Widget 類(沒有添加任何成員)。現在就很清楚了,這兩個看起來名字一樣的 Widget 其實是兩個類,一個是 namespace Ui 里的,另一個是 namespace Ui 之外的 Widget 類,namespace 聲明的類其實就是個空殼,它的基類功能是將此窗口上的所有控件的聲明、實例化、初始化。聲明的原因就是為了使 ui 布局控制和其他的控制代碼分離。
用一段 C++ 代碼來說明這一切:
test.h 文件內容:
#ifndef _TEST_H_
#define _TEST_H_
#include <iostream>
class Test{
public:
void display(){
std::cout << "This is a test!(no namespace)" << std::endl;
}
};
class Base{
public:
void display(){
std::cout << "This is a test!(namespace)" << std::endl;
}
};
/* 使用 namespace 聲明 */
namespace UI {
class Test: public Base {};
}
#endif
main.cpp 文件內容:
#include "test.h"
int main()
{
Test t;
UI::Test tt;
t.display();
tt.display();
return 0;
}
運行結果:

