今天在进行QT Widget的UI设计时,改了下Widget的对象名,然后在多次成功编译运行后,执行清理,重新构建,就出现了好多莫名奇妙的错误:
widget.h:12: 错误:forward declaration of 'struct Ui::Widget'
widget.cpp:8: 错误:invalid use of incomplete type 'struct Ui::Widget'
网上搜索发现是每当你新键一个 QT设计界面, QT会自动生成yyy.ui文件,如Widget.ui,由于我直接新建的GUI程序,同时也生成了对应的类,Widget,这时我改变了UI的对象名,类里却仍然使用了Widget这个类名,因此会导致出错。
解决方法是,先把有moc生成的ui_widget.h(与xxx.ui对应的)删掉,然后将界面的对象名设置为,
namespace Ui {
class Widget;
}
中对应的类名。也就时: 在 ui 中将这个 ui 里 widget 或者 dialog 或者 mainwindow 的名字修改为错误里提及的“ struct Ui::Widget ”中的 Widget 。总之, 要保持 ui 文件中 class 项的值与 ui 中 widget 或 dialog 或 mainwindow 的 ObjectName 相同 !