Qt C++命名空间

    关于命名空的自定义方法,可见参考资料[1],关于Qt Creator根据*.ui文件生成的ui_xxx.h中的宏QT_BEGIN_NAMESPACEQT_ENG_NAMESPACE的定义,可见参考资料[3]。下面解析ui_xxx.h文件中最后面的以下内容的含义:

namespace Ui {
    class MainWindow: public Ui_MainWindow {};
} // namespace Ui
    就是在QT_NAMESPACE这个命名空间中,再定义一个子命名空间,里面定义了一个类MainWindow,这个类public继承于Ui_MainWindow,而MainWindow本身没有定义新的成员。

    由上面的解析就可以知道,在MainWindow.cpp文件中并没有直接定义Ui_MainWindow这个类对象,而是改为定义Ui命名空间中的MainWindow类的对象!

    同时,由于ui_xxx.h文件会被其它源文件所包含,因此不在MainWindow.cpp中直接包含此头文件,避免加长编译时间。取而代之的是,在MainWindow.cpp文件中,再重定义了一个命名空间,并在此命名空间中声明Ui::MainWindow,如下面代码所示:

namespace Ui {
class MainWindow;
}

参考资料

[1]C++基础积累(1)using namespace potter 自定义命名空间和使用

[2]Qt与其他程序库发生了名字冲突

[3]QT_BEGIN_NAMESPACE、QT_END_NAMESPACE 等问题

你可能感兴趣的:(Qt C++命名空间)