您的位置:首页 > 编程语言 > Qt开发

Fc7下利用KDevelop3.5.2平台来编译开发QT4程序的完全解决

2010-04-07 20:14 399 查看
Fc7下利用KDevelop3.5.2平台来编译开发QT4程序的完全解决
一 前言
最近在学习QT图形界面开发,买了一本<<C++ GUI QT4 编程>>第二版,在图书馆借了本 <<精通QT4编程>>,先看了几天的 C++ GUI QT4 编程,感觉有点难度,于是 就开始看 精通QT4编程这本书,感觉写得还不错。本想在WIN下装一个QT4+MinGW来进行编程的,弄了两天没装上去,原因到最后只有一个,环境变量设置不对,要装 MinGW先得去掉VC6.0的环境变量。于是卸载了VC6.0,重新装还是不成功,不知什么原因,知道的朋友告诉我一下呵。后来一同学告诉我说是可以用VC6.0来开发QT,我想这了不错,毕竟VC环境熟悉些,于是折腾了半天装好了平台,关键步骤GOOLE一下都可以找到,主要有两步:
1) 配置window下的QT运行环境
2) 生成VC可用的lib文件。

(参考http://blog.163.com/ssb_it/blog/static/44876165201021911314/),可是我感觉用VC来开发QT有点不方便,关键是QT程序写好后,可以有两种编译方式:
1)用纯命令方式来编译,
2)用VC来编译
第一种显然可用,但是如果只在cmd命令模式下进行qmake,nmake等,就感觉没必要利用VC这个集成开发环境了,毕竟命令模式下的开发很不方便。

第二种方式中, 要用cmd命令行根据pro文件生成vc的工程文件xx.dsp, 然后再导到VC中运行,这是说要编译运行一个QT程序要同时运行CMD和VC,感觉这样很麻烦,不知能不能写好QT程序后直接在VC上进行编译调试运行呢,知道的朋友告诉我一下啊,先谢了。

综上,我还是回到原来的想法了,决定还是在Fedora 7中利用KDevelop来开发QT程序。 KDevelopDE是LINUX下的一个集成开发环境(IDE), 关于 KDevelop的Y详细介绍这里就不多说了。

二 QT4的安装

我刚开始用的是FC7自带的kdevelop3.5.2和QT4.3.4,当然FC7下还安装了qt3.3, 诚如网上很多兄弟所提出的问题一样,在编译<<精通QT4编程>>的第一个程序时,我也遇到了不少很多相似的问题,主要是环境变量设置好后,程序编译无错,一运行就出现N多错误。 kdevelop3.5.2是用QT3写的,我确认我已修改了程序的编译的路径,改为QT4的了,还是不少问题,为此我参考了下面的一些资料。
http://www.qtcn.org/bbs/read.php?tid=11584 http://www.qtcn.org/bbs/read.php?tid=13635 http://www.qtcn.org/bbs/read.php?tid=1947
还是无果。于是再GOOGLE,在http://fpcfjf.blog.163.com/blog/static/5546979320100281459721/
用KDevelop开发Qt4程序)的帮助下,决定把FC7自还的QT4给 卸了,自己再重新装一个。于是按照<<精通QT4编程>>后面的附录,参照网上的说明,装了一个QT4.3.2,安装过程很简单,也没有作太多设置。有如下几个步骤:

1. 下载 qt-x11-opensource-src-4.3.2.tar.gz

下载地址:ftp://ftp.trolltech.com/qt/source

2. 解压

[root@localhost ~]# tar zxvf qt-x11-opensource-src-4.3.2.tar.gz

3. 直接运行configure生成Makefile文件:

[root@localhost ~]#./configure

4. 编译

[root@localhost ~]#gmake

这个过程大约要一个半小时

5. 安装

[root@localhost ~]#gmake install

6. 设置环境变量

在 Linux 管理中,常有需要修改root目录下 .bash_profile 文件,更改环境变量的情况,文件修改后,一般的做法是source .bash_profile 在修改好.bash_profile 文件后,直接运行这个命令,就能直接让环境变量的修改生效了。具体做法:

1)用vi打开文件,然后编写

vi /root/.bash_profile(可以man vi 看vi的帮助也行。)

2)然后按i键,进入编辑状态,开始编辑。加入如下内容:

export QTDIR=/usr/local/Trolltech/Qt-4.3.2
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

如下图所示:



3)编辑完成后,按Esc键切换到命令状态 ,写入:wq 退出保存,q! 不保存退出。编辑完了后 source /root/.bash_profile就行了。



如上图,如果环境变量设置好后,在终端输入echo $QTDIR,出现的是刚安装的QT4.3.2,而不是QT3就可以了。

三 Kdevelop下编译QT4程序

QT4环境安装好后,结合FC7原有的kdevelop3.5.2,我们就可以在kdevelop下编译运行QT4程序了。

1、启动应用程序----KDevelop KDE/C++(fc7默认安装的是3.5.2)

2、工程->新建工程-(显示全部工程模板)->QMake Project->Basic qt4 Application->输入工程名然后所有默认下一步这时KDevelop会自动生成main.cpp。

3、工程->工程选项->C++特定设置->Qt->选定“此工程内使用Qt” 选择Qt4;然后选择qt4的qmake和designer的绝对路径,比如:

/usr/local/Trolltect/Qt4.3.2/qmake,

/usr/local/Trolltect/Qt-4.3.2/designer

4. 这时我们可以尝试着写Qt程序了,按照《精通QT4编程》中的第一例子,在kdevelop的main.cpp中输入代码:

1. main.cpp
#include <QtGui/QApplication>
#include <QtGui/QtGui>
#include "logindlg.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QTextCodec :: setCodecForTr(QTextCodec :: codecForName("UTF-8"));
QTranslator translator;
{
QStringList environment=QProcess :: systemEnvironment();
QString str;
bool bFinded=false;
foreach(str, environment)
{
if(str.startsWith("QTDIR="))
{ bFinded=true;
break;
}
}
if(bFinded)
{
str=str.mid(6);
bFinded=translator.load("qt_" + QLocale :: system().name(), str.append("/translations/"));
if(bFinded)
qApp->installTranslator(&translator);
else
qDebug() << QObject :: tr("没有支持中文的QT国际化翻译文件!");

}
else
{
qDebug() << QObject :: tr("必须设置QTDIR环境变量!");
exit(1);
}
}

CLoginDlg dlg;
return dlg.exec();
}

新建.h和.cpp文件,输入下面的代码:
2. logindlg.h

#ifndef _LOGINDLG_H
#define _LOGINDLG_H
#include <QtGui/QDialog>
#include <QtGui/QLineEdit>
//class QLineEdit
class CLoginDlg : public QDialog
{
Q_OBJECT //启动QT元对象的一些特性
public:
CLoginDlg(QWidget* = 0);
public slots:
virtual void accept();
private:
QLineEdit* usrLineEdit;
QLineEdit* pwdLineEdit;
};
#endif

3. logindlg.cpp

#include <QtGui/QDialog>
#include <QtGui/QLabel>
#include <QtGui/QGridLayout>
#include <QtGui/QPushButton>
#include <QtGui/QMessageBox>
#include "logindlg.h"
CLoginDlg :: CLoginDlg(QWidget* parent)
: QDialog(parent)
{
QLabel* usrLabel=new QLabel(tr("用户名"));
QLabel* pwdLabel=new QLabel(tr("密码"));
usrLineEdit=new QLineEdit;
pwdLineEdit=new QLineEdit;
pwdLineEdit->setEchoMode(QLineEdit::Password);//用星号*代用户实际输入的内容

QGridLayout* gridLayout=new QGridLayout;
//创建一个网格布局管理器QGridLayout对象gridLayout,并将窗口部件添加到该布局管理器中。
gridLayout->addWidget(usrLabel, 0, 0, 1, 1);
//添加的对象,行列号,行列的跨度
gridLayout->addWidget(usrLineEdit, 0, 1, 1, 3);
gridLayout->addWidget(pwdLabel, 1, 0, 1, 1);
gridLayout->addWidget(pwdLineEdit, 1, 1, 1, 3);

QPushButton* okBtn=new QPushButton(tr("确定"));
QPushButton* cancelBtn=new QPushButton(tr("取消"));
QHBoxLayout* btnLayout=new QHBoxLayout;
//设置水平布局管理器btnLayout对象内部窗口部件之间的间隔
btnLayout->setSpacing(60);
btnLayout->addWidget(okBtn);
btnLayout->addWidget(cancelBtn);

QVBoxLayout* dlgLayout=new QVBoxLayout;
//设置布局管理器dlgLayout边框的宽度,即其内部子窗口部件距离布局管理器边界(不可见的)的距离
dlgLayout->setMargin(40);
dlgLayout->addLayout(gridLayout);
//设置布局管理器dlgLayout中加入一个大小为40的stretch,可以自由伸缩
dlgLayout->addStretch(40);
dlgLayout->addLayout(btnLayout);
setLayout(dlgLayout);

connect(okBtn, SIGNAL(clicked()), this, SLOT(accept()));
connect(cancelBtn, SIGNAL(clicked()), this, SLOT(reject()));

setWindowTitle(tr("登录"));
resize(300, 200);
}

void CLoginDlg :: accept()
{
if(usrLineEdit->text().trimmed()==tr("lcf") && pwdLineEdit->text()==tr("lcf"))
{
QDialog :: accept();
}
else
{
QMessageBox :: warning(this, tr("警告"), tr("用户或密码错误"), QMessageBox :: Yes);
usrLineEdit->setFocus();//将光标的焦点定位到usrLineEdit
}
}



5、在Kdevelop和编译和运行QT程序的步骤是:

1)打开右侧的QMake管理器, 右击src子目录,执行Build,再执行Run qmake.

2) 打开 编译(Build)-->Build Project,然后再执行Excute(执行)。

第一次出现N多错误:



在确知程序无误和环境变量设置无误后,我查了N多资料,均没有解决答案,都说是KDEVELOP3下运行QT4程序是有问题的(但运行QT3程序没问题),但没有说明如何解决这些错误。 狂搜索后,发现了原因:错误是由src.pro引起的,仔细分析这个文件。



如上图:其中 QT -= gui 是不需要的,除非不使用GUI。QT选项是指定工程使用的QT模块,默认的是core gui,对应于QtCore和QtGui。去年QT -= gui 这句后就可以了。

另外,有时QT程序能通过编译,没有任何警告,但是无法运行,在Kdevelop中一点击运行就会提示:
QWidget: Cannot create a QWidget when no GUI is being used
出现这个问题的解决办法是:
新建的QT4 basic project中main函数的第一句话是:

QCoreApplication app(argc, argv);
此时如果程序中有基于QWidget的窗体,就会出现上面的错误,方法是,将其改成:
QApplication app(argc, argv);
另外,每次创建一个工程,在编译的时候都要选择支持的类库:
在QMake管理器中,选择上面窗口中的src,鼠标右键,进入Subproject setting, 然后选择configuration选项卡,选中需要的类库即可。

再运行结果如下:



6. 总结

折腾了几天,总算是有点收获,写了这篇文章,以作备忘,希望对出现类似问题的朋友有所帮助。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐