专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > QT开发

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

发布时间:2010-05-30 21:35:30 文章来源:www.iduyao.cn 采编人员:星星草
QT新手提问,QT4 GUI程序,一个奇怪的编译问题。
环境:Windows XP sp3 中文版, code::blocks 10.05, QT 4.7.4.
用code::blocks新建了QT4的GUI工程, 添加QT安装包中的例子程序源代码(Qt4.7.4examplesmainwindowsmenus):
mainwindow.cpp, mainwindow.h, menus.pro

1. 使用code::blocks编译错误:
objDebugmainwindow.o||In function `MainWindow':|
F:WenxysrcQTtest_windowmainwindow.cpp|47|undefined reference to `vtable for MainWindow'|
F:WenxysrcQTtest_windowmainwindow.cpp|47|undefined reference to `vtable for MainWindow'|
F:WenxysrcQTtest_windowmainwindow.cpp|47|undefined reference to `vtable for MainWindow'|
F:WenxysrcQTtest_windowmainwindow.cpp|47|undefined reference to `vtable for MainWindow'|
objDebugmainwindow.o:F:WenxysrcQTtest_windowmainwindow.h|56|undefined reference to `MainWindow::staticMetaObject'|
objDebugmain.o||In function `~MainWindow':|
F:WenxysrcQTtest_windowmainwindow.h|55|undefined reference to `vtable for MainWindow'|
F:WenxysrcQTtest_windowmainwindow.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 我没怎么用过
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: