参照《精通QT4编程》编写第一个QT程序总是失败
2009-04-21 21:52
459 查看
参照《精通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的下面的这两个
目录拷贝过来那
[ 本帖最后由 wayd2001 于 2008-7-12 15:06 编辑 ]
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
关于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
水手辛巴
连接时,需要你用-l指定连接需要用到的库的。
跟你环境路径设置的路径是有关系,但这只是提供了找到该库的路径,而非指定连接的库吧?
不知道说的正确否。
2008-7-13 19:55
err7dd
应该用 -l 指定一下连接的库吧,可以用nm察看一下需要具体连接哪一个库。
2008-7-13 23:26
mailisall
如果你用gtk你就可以用glade画了,不用这么痛苦地写代码了。
2008-7-14 09:33
wayd2001
你好,你所说的-l 参数,应该是用vim编译时候用到的吧,我用vim不加这个-l,只是将QTDIR和PATH定义为qt4的,就可以成功编译和运行了
可是在kdevelop中,我没有找到可以添加-l 类库的地方阿,而且qt4的目录下面没有include 和 lib目录,仅仅在qt-3.3下有,所以我觉得
是不是qt4就引用了qt3的库
还有,文个弱弱的问题,怎么用-l指定要链接的库阿,是在qmake -l ****这样吗》???
[ 本帖最后由 wayd2001 于 2008-7-14 09:36 编辑 ]
2008-7-14 11:26
j1111011
编译器命令:
cc -l库名 [添加链接时要用到的库]
2008-7-14 14:31
tigerajs
回复 #11 mailisall 的帖子
glade是很好用
页:
[1]
我使用的是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的下面的这两个
目录拷贝过来那
[ 本帖最后由 wayd2001 于 2008-7-12 15:06 编辑 ]
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
关于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
水手辛巴
原帖由 wayd2001 于 2008-7-13 12:28 发表
关于lib路径的问题,我看了下系统的环境变量,QTINC=/usr/lib/qt-3.3/include
QTLIB=/usr/lib/qt-3.3/lib 于是我查找相应的/usr/lib/qt4目录下面并没有include和lib目录,在
Kdevelop中,引用的也是QT3的 ...
关于lib路径的问题,我看了下系统的环境变量,QTINC=/usr/lib/qt-3.3/include
QTLIB=/usr/lib/qt-3.3/lib 于是我查找相应的/usr/lib/qt4目录下面并没有include和lib目录,在
Kdevelop中,引用的也是QT3的 ...
连接时,需要你用-l指定连接需要用到的库的。
跟你环境路径设置的路径是有关系,但这只是提供了找到该库的路径,而非指定连接的库吧?
不知道说的正确否。
2008-7-13 19:55
err7dd
应该用 -l 指定一下连接的库吧,可以用nm察看一下需要具体连接哪一个库。
2008-7-13 23:26
mailisall
如果你用gtk你就可以用glade画了,不用这么痛苦地写代码了。
2008-7-14 09:33
wayd2001
原帖由 水手辛巴 于 2008-7-13 17:59 发表
连接时,需要你用-l指定连接需要用到的库的。
跟你环境路径设置的路径是有关系,但这只是提供了找到该库的路径,而非指定连接的库吧?
不知道说的正确否。
连接时,需要你用-l指定连接需要用到的库的。
跟你环境路径设置的路径是有关系,但这只是提供了找到该库的路径,而非指定连接的库吧?
不知道说的正确否。
你好,你所说的-l 参数,应该是用vim编译时候用到的吧,我用vim不加这个-l,只是将QTDIR和PATH定义为qt4的,就可以成功编译和运行了
可是在kdevelop中,我没有找到可以添加-l 类库的地方阿,而且qt4的目录下面没有include 和 lib目录,仅仅在qt-3.3下有,所以我觉得
是不是qt4就引用了qt3的库
还有,文个弱弱的问题,怎么用-l指定要链接的库阿,是在qmake -l ****这样吗》???
[ 本帖最后由 wayd2001 于 2008-7-14 09:36 编辑 ]
2008-7-14 11:26
j1111011
编译器命令:
cc -l库名 [添加链接时要用到的库]
2008-7-14 14:31
tigerajs
回复 #11 mailisall 的帖子
glade是很好用
页:
[1]
相关文章推荐
- QT 使用qtcreator编写第一个登录程序
- 用QT编写的程序,怎样在申请资源失败后,关闭所有窗口,退出程序?
- qtday01 ubuntu 下手动编写第一个qt程序
- 【跟我一起开辟Qt之路】(3)编写我们第一个Qt程序Hello World
- MAC 平台 QT编写iphone程序,加载iphone模拟器失败解决办法
- 用QT编写的程序,怎样在申请资源失败后,关闭所有窗口,退出程序?
- QT基础之编写第一个QT程序
- Qt on Android---第一个程序Hello World
- 编写第一个jni入门程序
- 简单使用Eclipse编写第一个Java程序
- 编写简单的连接MongoDB数据库C++程序 && 解决编译C++程序时链接MongoDB动态库失败的问题
- 微信小程序-----安装,编写第一个小程序和运行到手机端
- 搭建Spring开发环境并编写第一个Spring小程序
- Android JNI编程(七)——使用AndroidStudio编写第一个JNI程序
- 编写第一个ice程序
- JavaScript强化教程——编写第一个jQuery程序
- Objective-C学习笔记(三)——用Objective-C编写第一个程序:Hello,World!
- 建立第一个Qt4程序
- Qt编写串口通信程序全程图文讲解(一)
- Android JNI编程(七)——使用AndroidStudio编写第一个JNI程序