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

来源:互联网 发布:计算机如何编程 编辑:程序博客网 时间:2024/05/17 03:35

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. 总结

      折腾了几天,总算是有点收获,写了这篇文章,以作备忘,希望对出现类似问题的朋友有所帮助。