• 8911阅读
  • 8回复

关于第一个“Hello Qt”编译错误的问题 [复制链接]

上一主题 下一主题
离线kingwonder
 
只看楼主 倒序阅读 楼主  发表于: 2010-12-30
          大家好。我最近要学习qt编程,可是目前一点qt的基础也没有,昨天下载了Qt软件按遇到了问题,希望大家能给点帮助。
     学习qt的官方书籍是C++ GUI Qt4,目前我看的是第二版,书中用的是Qt4.3.2,相信有人也看过本书了。但是在我编写第一个例子hello qt时便遇到了困难,真是出师未捷身先死啊。
    我安装的是最新版本的Qt4.7的sdk,基于windows平台的。安装过程很傻瓜,所有组件都是按默认安装的。
     安装完后,我试着用nokia的工具Qt Creator创建了一个Qt GUI工程,没问题,运行正常。但是下面又编写了一个基于控制台的hello qt,编译时却报错。我想问问,是不是需要配置什么环境之类的。我的第一个hello qt竟然让我如此纠结,还请不吝赐教。附源码和编译信息。

#include <QtCore/QCoreApplication> //此处和原书的4.3版中的  头文件路径有所差异
#include <Qt/qlabel.h>  //同上

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QLabel *label = new QLabel("Hello Qt!");
    label->show();

    return a.exec();
}


以下是编译输出:
Running build steps for project hello...
Configuration unchanged, skipping qmake step.
Starting: "C:/Qt/2010.05/mingw/bin/mingw32-make.exe" -w
mingw32-make: Entering directory `C:/Qt/2010.05/hello'

C:/Qt/2010.05/mingw/bin/mingw32-make -f Makefile.Debug

mingw32-make[1]: Entering directory `C:/Qt/2010.05/hello'

g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-subsystem,console -mthreads -Wl -o debug\hello.exe debug/main.o  -L"c:\Qt\2010.05\qt\lib" -lQtCored4

mingw32-make[1]: Leaving directory `C:/Qt/2010.05/hello'

mingw32-make: Leaving directory `C:/Qt/2010.05/hello'

debug/main.o: In function `main':

C:\Qt\2010.05\hello/main.cpp:7: undefined reference to `_imp___ZN6QLabelC1ERK7QStringP7QWidget6QFlagsIN2Qt10WindowTypeEE'

collect2: ld returned 1 exit status

mingw32-make[1]: *** [debug\hello.exe] Error 1

mingw32-make: *** [debug] Error 2

The process "C:/Qt/2010.05/mingw/bin/mingw32-make.exe" exited with code %2.
Error while building project hello (target: Desktop)
When executing build step 'Make'

注:我的qt安装路径在C:\Qt\2010.05,安装组件包含mingw。有人说去掉Shadow Build的对勾即可,我试了下没有成功。
离线jdwx

只看该作者 1楼 发表于: 2010-12-30
#include <QApplication> //此处和原书的4.3版中的  头文件路径有所差异
#include <QLabel>  //同上

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QLabel *label = new QLabel("Hello Qt!");
    label->show();

    return a.exec();
}
按上面的就能运行!
QT4.7.0改变还挺大的,
你的书上的例子不适用QT4.7.0,还是看看Qt自带的例子吧!
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线kingwonder
只看该作者 2楼 发表于: 2010-12-30
回 1楼(jdwx) 的帖子
我不知道你试过了没有,在我的电脑上(Qt 4.7.2),你的程序(其实和书上的程序一模一样)根本不能运行,其中一个错误是QApplication和QLabel “was not declared in this scope”,也就是说头文件的路径都不对,所以我在楼顶的帖子上改动了头文件的路径,但是改后就发现了
Error while building project hello (target: Desktop)
When executing build step 'Make'
这样的错误。
离线jdwx

只看该作者 3楼 发表于: 2010-12-30
你把QT装在哪个目录下了?目录不能有空格,还不能是有中文,最好8个字符以内,如C:\QT,D:\QT。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线kingwonder
只看该作者 4楼 发表于: 2010-12-30
回 3楼(jdwx) 的帖子
注:我的qt安装路径在C:\Qt\2010.05,安装组件包含mingw。有人说去掉Shadow Build的对勾即可,我试了下没有成功。
离线jdwx

只看该作者 5楼 发表于: 2010-12-30
我的也是2010.05那段代码我试过了好用!
你写的程序所在的目录,也不能有空格和中文。
实在不行就重新装一次吧,放到其它盘符如D:。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线jdwx

只看该作者 6楼 发表于: 2010-12-30
我是先建立一个空工程,再建立main.cpp把代码复制进去,编译就好了!
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线kingwonder
只看该作者 7楼 发表于: 2010-12-30
回 6楼(jdwx) 的帖子
好的,非常感谢你,问题解决了。
不是安装软件的问题,是建立工程的问题。我刚开始只看到了三个选项,就选了基于控制台的工程,结果,无论是头文件的位置还是最后编译的结果,和建立空项目是不一样的。
这次我创建了一个空项目,运行没有问题。
多谢jdwx 的热心回答,希望其他新手能够看到这个帖子避免和我一样遇到这种问题。

不过我还有新问题。在使用vs等编译器的时候,建立空项目和基于控制台的程序,除了入口函数(前者是main后者是t_main)不同外,其他的没有什么差别。我想问一下,在开发qt时,建立控制台和空项目工程有什么区别??
离线liumu1209
只看该作者 8楼 发表于: 2010-12-31
.pro里的内容不同,也就是makefile不同,我也是昨天刚学的,也是用控制台新建工程,遇到和你的一样的问题。解决方案是,把.pro项目工程的文件里的内容,注释掉以下内容即可,你试试。
QT       += core

//QT       -= gui

TARGET = untitled
//CONFIG   += console
//CONFIG   -= app_bundle

注释掉这三个即可。
快速回复
限100 字节
 
上一个 下一个