两个qt ui头文件命名空间问题

Posted

技术标签:

【中文标题】两个qt ui头文件命名空间问题【英文标题】:two qt ui header file namespace issue 【发布时间】:2020-04-24 04:07:11 【问题描述】:

我有两个 ui 标头 - ui_FlowChartEditor.hui_Notepad.h

这段代码有问题:

//ui_FlowChartEditor.h
namespace Ui 
    class FlowChartEditorClass: public Ui_FlowChartEditorClass ;
 // namespace Ui
//ui_Notepad.h
namespace Ui 
    class NotepadClass: public Ui_NotepadClass ;
 // namespace Ui

'Ui' 命名空间重复,所以我通过更改命名空间的名称来解决这个问题。

像这样:

//ui_FlowChartEditor.h
namespace Ui_FlowChartEditor 
    class FlowChartEditorClass: public Ui_FlowChartEditorClass ;
 // namespace Ui
//ui_Notepad.h
namespace Ui_Notepad 
    class NotepadClass: public Ui_NotepadClass ;
 // namespace Ui

它适用于 Debug 配置,但不适用于 Release 配置。

编译器说:[error C2653: 'Ui_FlowChartEditor': is not a class or namespace name (compile source file FlowChartEditor.cpp)], etc..

有没有办法解决这个问题?

提前致谢。

通过@zgyarmati的解决方案,我解决了这个问题。

我在 Qt Designer 中更改了 objectName。

ui_头文件变成了这样:

namespace FlowChartEditorUi 
    namespace Ui 
        class FlowChartEditorClass : public Ui_FlowChartEditorClass ;
     // namespace Ui
 // namespace FlowChartEditorUi

谢谢。

【问题讨论】:

【参考方案1】:

ui_*.h 文件由 uic 从您的表单 (.ui) 文件中重新生成。您仅为调试版本更改了生成的ui_*.h 文件,但没有为发布版本更改,因此您在那里拥有原始的 uic 生成文件。 您也可以为发布版本更改文件,但是 您不应该更改生成的文件,因为它们将被覆盖。 要为您的 ui 类设置命名空间,当您在 QtCreator 中创建设计器表单类时,请指定带有命名空间的名称,例如Ui_Notepad::NotepadClass 在“类名”字段中,生成的ui_*.h 文件将包含该命名空间。

如果您已经有了表单,那么您还可以在 QtCreator 表单编辑器中相应地更改它们的“objectName”属性。

【讨论】:

以上是关于两个qt ui头文件命名空间问题的主要内容,如果未能解决你的问题,请参考以下文章

C2653:不是没有预编译头文件的类或命名空间

C++ 中的头文件和命名空间

C++:命名空间——如何在头文件和源文件中正确使用?

命名空间重定义机制如何工作?

将类放入命名空间

用于头文件中的匿名命名空间