QT新手提问,QT4 GUI程序,一个奇怪的编译问题。
环境:Windows XP sp3 中文版, code::blocks 10.05, QT 4.7.4.
用code::blocks新建了QT4的GUI工程, 添加QT安装包中的例子程序源代码(Qt\4.7.4\examples\mainwindows\menus):
mainwindow.cpp, mainwindow.h, menus.pro
1. 使用code::blocks编译错误:
obj\Debug\mainwindow.o||In function `MainWindow':|
F:\Wenxy\src\QT\test_window\mainwindow.cpp|47|undefined reference to `vtable for MainWindow'|
F:\Wenxy\src\QT\test_window\mainwindow.cpp|47|undefined reference to `vtable for MainWindow'|
F:\Wenxy\src\QT\test_window\mainwindow.cpp|47|undefined reference to `vtable for MainWindow'|
F:\Wenxy\src\QT\test_window\mainwindow.cpp|47|undefined reference to `vtable for MainWindow'|
obj\Debug\mainwindow.o:F:\Wenxy\src\QT\test_window\mainwindow.h|56|undefined reference to `MainWindow::staticMetaObject'|
obj\Debug\main.o||In function `~MainWindow':|
F:\Wenxy\src\QT\test_window\mainwindow.h|55|undefined reference to `vtable for MainWindow'|
F:\Wenxy\src\QT\test_window\mainwindow.h|55|undefined reference to `vtable for MainWindow'|
||=== Build finished: 7 errors, 0 warnings ===|
1.1 如果不加这三个源文件,编译OK。如果把mainwindow.h中的 Q_OBJECT注释:
class MainWindow : public QMainWindow
{
Q_OBJECT
//...
}
编译能过,可是运行生成的程序时,某些菜单操作没有响应动作。
1.2 我google到一个办法,在命令行下运行以下命令:
qmake menus.pro
make
运行生成的程序,OK!
2问题:
2.1. 如果在code::blocks中编译通过?
2.2 Q_OBJECT是一个宏吧?这行代码的作用是?
2.3 为什么用1.2的方法能编译通过?
因为偶是QT新手(我会VC,现在主要做Linux kernel开发,由于项目需要写一个QT的demo),所以请各位仔细讲解, 非常感谢!
[解决办法]
qmake后,看看生成的Makefile就一目了然了。
通俗地说,只有Q_OBJECT ,才可以使用Qt自己封装的东西,起个标识作用告诉MOC去解析
[解决办法]
比如:Qt的信号和槽机制 就需要Q_OBJECT ,否则无效。
[解决办法]
1 楼主无代码
2 我只会用Qt Creator
[解决办法]
以前碰到类似的,不过使用的是 qt creator,不知是否如此:
qmake xx.pro 生成 makefile 时
1. 检查 .pro 文件中是否增删文件
2. 头文件(不知是否只管头文件)中类定义是否有 qt 专用的一些宏或标识符,如果有 Q_OBJECT 会增加编译规则,生成 moc_XXX.cpp
如果根据 .pro 生成 makefile 后只修改已有头文件,例如增加删除类定义中的 Q_OBJECT,不影响相应 moc_XXX.cpp 的增加和删除,此时最好重新运行 qmake xxx.pro,或删除 makefile、或刷新下 .pro 文件
[解决办法]
上面似乎回答错误
qt 里有些自己定义的标识符,如 slot、 signal ,需要先使用 qmake 预编译下,然后才能用通用的编译器
[解决办法]