qt学习笔记1
来源:互联网 发布:win7 网络连接不可用 编辑:程序博客网 时间:2024/05/21 10:04
#include <QApplication>#include "finddialog.h"int main(int argc, char *argv[]){ QApplication app(argc, argv); FindDialog *dialog = new FindDialog; dialog->show(); return app.exec();}具体的代码可以参照该书本,书中说:为了编译这个程序,还像以前一样运行qmake。由于在FindDialog中包含了Q_OBJECT宏,由qmake生成的makefile会保换特殊的规则运行moc(Qt的原对象编译器)。
为了确保moc正确工作,类定义必须放在头文件而不能放在实现文件中。由moc生成的代码中包含这个头文件,并加入它自己实现的C++代码。
使用了Q_OBJECT宏的类必须运行moc。如果使用qmake,那么makefile里自动包含相关的规则。如果忘记了运行moc,就会发生连接错误。不同的编译器给出的提示信息不同,有的会非常晦涩。GCC给出的错误信息如下:
finddialog.o: In function 'FindDialog::tr(char const*, charconst*)':
/usr/lib/qt/src/corelib/global/qglobal.h:1430:undefined reference to
'FindDialog::staticMetaObject'
Visual C++中的输出是这样:
finddialog.obj : error LNK2001: unresolved external symbol
"public:~virtual int __thiscallMyClass::qt_metacall(enum QMetaObject
::Call,int,void * *)"
这时需要重新运行qmake,更新makefile,然后编译程序。
看了书本上,那么简单的几个字。。。真心是没有看懂该怎么处理。。后来找下网上的资料。。。终于摸索出了。。正确的结果!
其解决方法:
利用命令行进入main.cpp所在的目录【finddialog.h和finddialog.cpp与之在同一目录下】输入moc finddialog.h -o moc_finddialog.cpp命令之后,主目录下多了一个moc_finddialog.cpp文件,Add Files to Project命令将其加入工程,编译后就可以了。
这是因为:当要在GUI中用到信号与槽,就需在.h文件中的类里写入Q_OBJECT宏。而任何含有Q_Object的类都必须使用Qt的moc工具生成对应的cpp文件,然后在项目里面包含这个cpp,编译才能成功,否则会出错链接错误。
- QT学习笔记1
- Qt学习笔记【1】
- QT学习笔记-1
- Qt学习笔记(1)
- Qt学习笔记1
- qt学习笔记1
- Qt学习笔记1
- Qt学习笔记1
- qt学习笔记1
- Qt学习笔记1
- QT学习笔记1
- QT学习笔记1
- QT学习笔记1:QT入门
- QT webkit学习笔记(1)
- QT webkit学习笔记(1)
- Qt入门学习笔记1
- Qt学习笔记1-QString
- QT学习笔记(1)
- qsort()应用大全
- java 常用系统参数System.getProperty()列表
- 选夫婿1
- 使用base64编码图片音频资源
- android:screenOrientation&&configchanges
- qt学习笔记1
- matlab小知识
- Android4.2 scrollview 手势bug
- java如何调用本地打印机进行图片打印
- 说说几个常用的css元素
- Visual Studio常用快捷键
- JNDIs数据源的配置方法
- 生成一个随机字符串 安卓
- C++编译错误:error C2533: 构造函数不能有返回类型