首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

QT新手提问,QT4 GUI程序,一个奇怪的编译有关问题

2012-01-28 
QT新手提问,QT4 GUI程序,一个奇怪的编译问题。环境:Windows XP sp3 中文版, code::blocks 10.05, QT 4.7.4.

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 预编译下,然后才能用通用的编译器
[解决办法]

探讨

楼上,参否回答我的第1个和第3个问题?thanks.

[解决办法]
code::blocks 我没怎么用过

热点排行