参照《精通QT4编程》编写第一个QT程序总是失败

部署运行你感兴趣的模型镜像
参照《精通QT4编程》编写第一个QT程序总是失败

我使用的是fedora9操作系统,自带的qt版本是4.3.4,KDEVELOP版本是3.5.1,KDE版本是3.5.9,按照书中第一个例子进行编写练习
首先,我修改了/etc/bashrc文件,加入export QTDIR=/usr/lib/qt4
export PATH=$QTDIR/bin: $PATH
然后source /etc/bashrc启用。
如果不使用kdevelop,用vim编写函数:
#include <QtGui/QApplication>
#include <QtGui/QWidget>
#include <QtGui/QLabel>
#include <QtCore/QTextCodec>
#include <QtGui/QPushButton>
#include <QtGui/QVBoxLayout>
int main(int argc, char* argv[])
{
        QApplication app(argc, argv);
        QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030 "   ) );
        QWidget* pWidget = new QWidget;
        QLabel label(pWidget);
        label.setText(QObject::tr("ͬhello world!"));
        QPushButton* btn = new QPushButton(QObject::tr("关闭  "   ), pWidget);
        QVBoxLayout* layout = new QVBoxLayout;
        layout->addWidget(&label);
        layout->addWidget(btn);
        pWidget->setLayout(layout);
        QObject::connect(btn, SIGNAL(clicked()), pWidget, SLOT(close()));
        pWidget->show();
        return app.exec();
}
然后使用命令:qmake -project
qmake
make成功运行程序!

但是按照书中使用kdevelp的步骤,总是失败,我采取的步骤如下:
1.打开kdevelp,选择工程|新建工程|选择“C++|QMake project|Basic Qt4 Application”,选择存放位置~/qt,输入程序名称hello;
2.设置工程选项中,设置qt4的qmake和Qt设计器的绝对路径:/usr/lib/qt4/bin/qmake和/usr/lib/qt/bin/designer
3.略过版本控制系统和“.h文件的模板”和".cpp的文件模板"选项,点击完成,kdevelop会自动生成一个标准的C++主程序,再次编辑修改上面的hello代码,我是直接将#include <QtGui/QApplication>
#include <QtGui/QWidget>
#include <QtGui/QLabel>
#include <QtCore/QTextCodec>
#include <QtGui/QPushButton>
#include <QtGui/QVBoxLayout>
int main(int argc, char* argv[])
{
        QApplication app(argc, argv);
        QTextCodec::setCodecForTr(QTextCodec::codecForName("gb1803 0 " ) );
        QWidget* pWidget = new QWidget;
        QLabel label(pWidget);
        label.setText(QObject::tr("ͬhello world!"));
        QPushButton* btn = new QPushButton(QObject::tr("关闭 " ), pWidget);
        QVBoxLayout* layout = new QVBoxLayout;
        layout->addWidget(&label);
        layout->addWidget(btn);
        pWidget->setLayout(layout);
        QObject::connect(btn, SIGNAL(clicked()), pWidget, SLOT(close()));
        pWidget->show();
        return app.exec();
}
覆盖掉原来的。
4.然后编辑运行
提示N多错误,如下:cd '/home/szq/qt/he' && LC_MESSAGES="C" LC_CTYPE="C" gmake -k
cd src/ && /usr/lib/qt4/bin/qmake src.pro -unix -o Makefile
cd src/ && gmake -f Makefile
compiling main.cpp (g++)
linking ../bin/he (g++)
main.o: In function `main':
/home/szq/qt/he/src/main.cpp:30: undefined reference to `QApplication: :  Q Application(int&, char**, int)'
/home/szq/qt/he/src/main.cpp:32: undefined reference to `QWidget: : Q Widget(QWidget*, QFlags<Qt::WindowType>)'
/home/szq/qt/he/src/main.cpp:33: undefined reference to `QLabel: : Q Label(QWidget*, QFlags<Qt::WindowType>)'
/home/szq/qt/he/src/main.cpp:34: undefined reference to `QLabel: : s etText(QString const&)'
/home/szq/qt/he/src/main.cpp:35: undefined reference to `QPushButton: : Q PushButton(QString const&, QWidget*)'
/home/szq/qt/he/src/main.cpp:36: undefined reference to `QVBoxLayout:  Q VBoxLayout()'
/home/szq/qt/he/src/main.cpp:37: undefined reference to `QBoxLayout: : a ddWidget(QWidget*, int, QFlags<Qt::AlignmentFlag>)'
/home/szq/qt/he/src/main.cpp:38: undefined reference to `QBoxLayout::addWidget(QWidget*, int, QFlags<Qt::AlignmentFlag>)'
/home/szq/qt/he/src/main.cpp:39: undefined reference to `QWidget::setLayout(QLayout*)'
/home/szq/qt/he/src/main.cpp:42: undefined reference to `QApplication::exec()'
/home/szq/qt/he/src/main.cpp:42: undefined reference to `QLabel::~QLabel()'
/home/szq/qt/he/src/main.cpp:42: undefined reference to `QApplication::~QApplication()'
/home/szq/qt/he/src/main.cpp:42: undefined reference to `QApplication::~QApplication()'
/home/szq/qt/he/src/main.cpp:42: undefined reference to `QLabel::~QLabel()'
collect2: ld returned 1 exit status
gmake[1]: *** [../bin/he] Error 1
gmake[1]: Target `first' not remade because of errors.
gmake: *** [sub-src-make_default] Error 2
gmake: Target `first' not remade because of errors.
*** Exited with status: 2 ***

然后。。两天之后,无论怎么修改,还是这样,快疯了,希望大家指点迷津,感激不尽那!!~

PS:这样的情况,我查了下网上资料,都说到要设置环境变量的问题,但是我已经用export导出了PATH和QTDIR,应该没有问题了
而且网络上有些人不仅仅修改QTDIR和PATH,还有QTINC和QTLIB,定义QTINC=/usr/lib/qt4/include,QTLIB=/usr/lib/qt4/lib
但是我看了下/usr/lib/qt4下面没有include和lib目录,这个是怎么回事阿,但是奇怪的是fedora9自带的qt-3.3的版本中, 在/usr/lib/qt-3.3下面就有include和lib这两个目录,很是不明白,为什么qt4下没有,是不是应该把QT-3.3的下面的这两个 目录拷贝过来那

[[i] 本帖最后由 wayd2001 于 2008-7-12 15:06 编辑 [/i]]

 

2008-7-12 15:02 wayd2001
因为有些字符会出现表情,所以我家了空格,不知道大家能不能看明白

 

2008-7-12 15:44 nicozhou
有没有可能是环境变量设置不对啊,我以前也总出错,你要确认你正整个开发环境搭好了

 

2008-7-12 16:36 sleetdrop
记得Redhat一直喜欢把每个包拆开成runtime的包,一个开发包。
你看看是不是有一个类似qt4-dev的包你没有装。

 

2008-7-12 16:42 sleetdrop
sorry,看错了,你用vim已经成功了。那个下面的应该是你lib的路径设置问题,在linking 的时候出的错。

 

2008-7-12 20:28 bood
回复 #1 wayd2001 的帖子

恩,同意ls

 

2008-7-13 12:28 wayd2001
[quote]原帖由 [i]sleetdrop[/i] 于 2008-7-12 16:42 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8798318&ptid=1196516][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]
sorry,看错了,你用vim已经成功了。那个下面的应该是你lib的路径设置问题,在linking 的时候出的错。 [/quote]


关于lib路径的问题,我看了下系统的环境变量,QTINC=/usr/lib/qt-3.3/include QTLIB=/usr/lib/qt-3.3/lib  于是我查找相应的/usr/lib/qt4目录下面并没有include和lib目录,在 Kdevelop中,引用的也是QT3的nclude和lib目录,所以我想是不是qt4.3.4和KDEVELOP 3.5.1用的就是qt3的。

lib的路径应该没有问题阿

 

2008-7-13 12:30 wayd2001
谢谢上面各位的耐心解答,问题依然存在

 

2008-7-13 17:59 水手辛巴
[quote]原帖由 [i]wayd2001[/i] 于 2008-7-13 12:28 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8801353&ptid=1196516][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]



关于lib路径的问题,我看了下系统的环境变量,QTINC=/usr/lib/qt-3.3/include QTLIB=/usr/lib/qt-3.3/lib  于是我查找相应的/usr/lib/qt4目录下面并没有include和lib目录,在 Kdevelop中,引用的也是QT3的 ... [/quote]

连接时,需要你用-l指定连接需要用到的库的。
跟你环境路径设置的路径是有关系,但这只是提供了找到该库的路径,而非指定连接的库吧?
不知道说的正确否。

 

2008-7-13 19:55 err7dd
应该用 -l 指定一下连接的库吧,可以用nm察看一下需要具体连接哪一个库。

 

2008-7-13 23:26 mailisall
如果你用gtk你就可以用glade画了,不用这么痛苦地写代码了。

 

2008-7-14 09:33 wayd2001
[quote]原帖由 [i]水手辛巴[/i] 于 2008-7-13 17:59 发表 [url=http://bbs.chinaunix.net/redirect.php?goto=findpost&pid=8802382&ptid=1196516][img]http://bbs.chinaunix.net/images/common/back.gif[/img][/url]


连接时,需要你用-l指定连接需要用到的库的。
跟你环境路径设置的路径是有关系,但这只是提供了找到该库的路径,而非指定连接的库吧?
不知道说的正确否。 [/quote]


你好,你所说的-l 参数,应该是用vim编译时候用到的吧,我用vim不加这个-l,只是将QTDIR和PATH定义为qt4的,就可以成功编译和运行了

可是在kdevelop中,我没有找到可以添加-l 类库的地方阿,而且qt4的目录下面没有include 和 lib目录,仅仅在qt-3.3下有,所以我觉得

是不是qt4就引用了qt3的库

还有,文个弱弱的问题,怎么用-l指定要链接的库阿,是在qmake -l ****这样吗》???

[[i] 本帖最后由 wayd2001 于 2008-7-14 09:36 编辑 [/i]]

 

2008-7-14 11:26 j1111011
编译器命令:
cc -l库名          [添加链接时要用到的库]

 

2008-7-14 14:31 tigerajs
回复 #11 mailisall 的帖子

glade是很好用


页: [1]

您可能感兴趣的与本文相关的镜像

Facefusion

Facefusion

AI应用

FaceFusion是全新一代AI换脸工具,无需安装,一键运行,可以完成去遮挡,高清化,卡通脸一键替换,并且Nvidia/AMD等显卡全平台支持

目录 第1章走近Qt 1.1Qt简介 1.2Qt纪事概览 1.3Qt套件的组成 1.4Qt的授权 1.5Qt的产品 1.6Qt的服务与支持 1.7Qt的最新进展 1.7.1增加协议 1.7.2开放源代码库 1.7.3确定Qt的发展方向 1.7.4Qt4.5——Qt发展的重要里程碑 1.8为什么选择Qt 1.9问题与解答 1.10总结与提高 第2章Qt的安装与配置 2.1获取Qt 2.2协议说明 2.3安装Qt 2.3.1Qt/X11的安装 2.3.2Qt/Windows的安装 2.3.3Qt/Mac的安装 2.3.4Qt/WindowsCE 2.3.5Qt/S60 2.3.6基于Linux发行版的安装 2.4配置Qt4环境 2.4.1Windows平台 2.4.2X11平台 2.5问题与解答 2.6总结与提高 第3章Qt编程基础 3.1标准C++精讲 3.1.1程序设计语言介绍 3.1.2C++语法基础知识 3.1.3C++高级应用——虚函数 3.2Windows编程基础 3.2.1需要掌握的技能 3.2.2Windows运行机理 3.2.3Windows编程基础 3.3Linux编程基础 3.3.1你必须掌握的技能 3.3.2文件系统管理 3.3.3XWindow系统 3.3.4常用命令 3.3.5Shell应用 3.3.6使用库程序 3.3.7使用vi 3.3.8使用GCC 3.3.9使用GDB 3.4Mac编程基础 3.4.1你必须掌握的技能 3.4.2MacOSX的系统架构 3.4.3MacOsX文件系统 3.4.4Cocoa应用开发简介 3.4.5Xcode简介 3.5问题与解答 3.6总结与提高 第4Qt4集成开发环境 4.1常见的QtIDE 4.2QtCreator 4.2.1简介 4.2.2主要特点 4.2.3安装与配置 4.3Eclipse! 4.3.1简介 4.3.2主要特点 4.3.3安装与配置 4.3.4使用要领 4.4VisualStudio2008与Qt4.5 4.5问题与解答 4.6总结与提高 第5章使用Qt基本GUI工具 5.1使用QtDesigner。进行GUI设计 5.1.1简介 5.1.2启动并设置QtDesigner 5.1.3功能说明 5.1.4QtGUI设计基本流程 5.2使用QtAssistant获取在线文档与帮助 5.2.1简介 5.2.2Qt的参考文档 5.2.3使用QtAssistant 5.3使用QtDemo学习Qt应用程序开发 5.4问题与解答 5.5总结与提高 第6章Qt4程序开发方法和流程 6.1开发方法 6.2HelloQt 6.2.1基本流程 6.2.2源码分析 6.2.3.编译运行 6.2.4第2种方法 6.2.5第3种方法 6.3几个重要的知识点 6.4问题与解答 6.5总结与提高 第7章对话框 7.1QDialog类 7.2子类化QDialog 7.3快速设计对话框 7.4常见内建对话框的使用 7.4.1标准输入框 7.4.2标准颜色对话框 7.4.3标准字体对话框 7.4.4标准消息对话框 7.4.5标准对话框的使用实例 7.5模态对话框与非模态对话框 7.6问题与解答 7.7总结与提高 第8章主窗口 8.1主窗口框架 8.2创建主窗口的方法和流程 8.2.1方法 8.2.2流程 8.3代码创建主窗口 8.3.1头文件 8.3.2实现文件 8.4使用QtDesigner创建主窗口 8.4.1创建菜单 8.4.2创建动作 8.4.3创建工具栏 8.4.4创建锚接窗口部件 8.4.5创建中心窗口部件 8.5中心窗口部件专题 8.5.1几种常见情形 8.5.2创建和使用 8.6Qt4资源系统 8.6.1Qt资源系统的改进 8.6.2Qt4资源集文件 8.6.3资源文件的使用方法 8.6.4资源浏览器的使用 8.7锚接窗口 8.7.1创建锚接窗口的方法和流程 8.7.2设置锚接窗体状态的方法 8.8多文档 8.9问题与解答 8.10总结与提高 第9章Qt样式表与应用程序外观 9.1应用程序的外观 9.1.1应用程序的风格 9.1.2如何设置样式 9.2QStyle类的使用 9.3样式表概述 9.4使用样式表 9.4.1与QtDesigner集成使用 …… 第10章在程序中使用.ui文件 第11章布局管理 第12章使用QtCreator 第13章Qt核心机制与原理 参考文献 后记
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值