1QT4程序开发说明刘永锋2010-06-13一.编译环境配置安装程序:在192.10.10.122/soft下1.1.QT包安装安装QT包(目前使用版本为QT4.4.3、以后使用QT4.5.2,QT4.5.2及以上版本需要使用源码VC6编译),安装好需要修改配置:QTDIR:QT的安装路径。如:QTDIRC:\Qt\4.4.3PATH修改:把原来Qt3的改成Qt4.4.2的cmd执行qmake–v查看qmake的版本,确保是QT4.4.221.2.VC配置修改Include修改:把原来的QT3的include改成4.4.2Lib修改:把原来的QT3的lib改成4.4.231.3.QTCreater安装目前可以使用,环境是完整的,安装完毕后就可以编译。直接安装便可以。也可以使用目前最高的版本,需要qt4.6以上的版本。缺少qt版本不可以用来编译。但是建工程是可以的。需要先安装QT,然后再安装mingw然后再安装。安装QTCreater的目的是用来生成QT的UI和相应的文件。4二.可执行程开发2.1.VC工程2.1.1.新建工程2.1.2.工程环境设置General页面5选择生成的文件输出设置:是中间文件生成的路径是生成的可执行文件路径Debug页面设置调试时可执行程序的路径调试时的输入参数设置6C/C++页面外部宏定义设置本工程包含的文件路径7Link页面连接的dll文件82.1.3.程序需要加的库说明compatlib.lib基本库qtext.libqt相关的库sql.lib数据库接口库tcpudp.libtcpudp通信库netlib.libc/s架构通信库onldb.lib实时库访问接口库clstbase.lib集群管理基本库bscmbase.lib曲线管理基本库dvcbase.lib变电站控制基本库svclib.lib电厂控制基本库mfcbaselinux上mfc兼容lib,在linux上基本上都包括此库qtcurvedll.lib曲线板库avcclientinitsrvlib.lib集群管理客户端访问库thdblistviewdll.libqlistview扩展库2.2.QTUI界面新建qt工程:需要在qtcreater内新建选择使用工程9Name和Createin可以设置生成的工程名字和路径Classname设置类的名字,可以修改Baseclass设置界面继承的基类类型,可以为QMainWindow(主窗口)、QWidget(框架)、Qdialog(对话框)Sourcefile设置.cpp文件的名字10Generatefore设置是否生成ui文件Formfile设置ui文件的名称生成的工程:Mainwindows.cpp实现的cpp文件,后面我们写的实现代码都要放到此cpp下的类里面。mainwindows.h头文件定义mainwindows.uiui文件11qq.pro生成的pro文件2.3.工程合并2.3.1.QT的界面程序合并到VC工程中需要QT工程中的文件:VC工程的结构:拷贝到VC工程下,相应的添加到VC工程下。新建FormFiles和Generated添加mainwindow.ui到FormFiles添加mainwindow.h到HeaderFiles添加mainwindow.cpp到SourceFiles等编译了mainwindow.ui会生成一个ui_mainwindow.h文件添加ui_mainwindow.h到Generated下12等编译了mainwindow.h会生成一个moc_mainwindow.h文件添加moc_mainwindow.h到Generated下2.3.2.编译环境设置mainwindow.ui文件设置:RunningUIConmainwindow.uiC:\Qt\4.4.3\bin\uic.exe$(InputPath)-o.\ui_mainwindow.h.\ui_mainwindow.hmainwindow.h文件设置:13RunningMOConmainwindow.hC:\Qt\4.4.3\bin\moc.exe-DUNICODE-DQT_LARGEFILE_SUPPORT-DQT_THREAD_SUPPORT-DQT_DLL-DQT_QT3SUPPORT_LIB-DQT3_SUPPORT-DQT_GUI_LIB-DQT_CORE_LIB-Ic:\Qt\4.4.3\include\QtCore-Ic:\Qt\4.4.3\include\QtCore-Ic:\Qt\4.4.3\include\QtGui-Ic:\Qt\4.4.3\include\Qt3Support-Ic:\Qt\4.4.3\include-Ic:\Qt\4.4.3\include\ActiveQt-Idebug-I.-Ic:\Qt\4.4.3\mkspecs\win32-msvc-D_MSC_VER=1200-DWIN32$(InputPath)-odebug\moc_mainwindow.cppdebug\moc_mainwindow.cppQT包含文件和连接库设置增加宏:QT_LARGEFILE_SUPPORT,QT_THREAD_SUPPORT,QT_DLL,QT_GUI_LIB,QT_CORE_LIB14增加include路径:c:\Qt\4.4.3\include\QtCore,c:\Qt\4.4.3\include\QtGui,c:\Qt\4.4.3\include\Qt3Support,c:\Qt\4.4.3\include,c:\Qt\4.4.3\include\ActiveQt增加lib路径:c:\Qt\4.4.3\lib\QtGuid4.libc:\Qt\4.4.3\lib\QtCored4.lib15注:如需要QT3的支持,需要增加c:\Qt\4.4.3\lib\Qt3Supportd4.lib,和路径:c:\Qt\4.4.3\include\Qt3Support如果报错:fatalerrorC1010:unexpectedendoffilewhilelookingforprecompiledhead如下设置:16执行的程序带有console如果只起界面不要console设置如下:把/subsystem:console改为:/subsystem:windows172.3.3.编译编译。添加自己代码,调试。2.4.Pro文件编写2.4.1.Pro文件说明18以bscmclient.pro为例说明:TEMPLATE定义生成类型:app为可执行程序、lib为生成库文件CONFIG定义编译属性一般有:qtwarn_offdebugthread等TARGET定义生成的目标文件名称DESTDIR定义生成目标文件的路径DEFINES定义了外部指定的宏定义INCLUDEPATH定义了包含头文件的路径LIBS定义了包含的动态库文件QMAKE_CFLAGS定义了$转译符号QMAKE_CXXFLAGS定义了$转译符号OBJECTS_DIR定义了生成中间文件的路径FORMS定义了QT4生成的ui文件SOURCES定义了包含的.cpp文件HEADERS定义了包含的.h文件FORMS3定义了QT3生成的ui文件QT+=qt3support定义了包含QT3支持CONFIG+=uic3定义了编译ui的uic为uic3unix:定义了此定义在unix操作系统上起作用win32:定义了此定义在windows操作系统上起作用2.4.2.Pro文件编写按照格式编写pro文件19或者拷贝其它pro文件到程序目录下,修改文件名和内容。Ok上传到linux/unix上qmakemake编译。编译完后执行。三.动态库开发新建工程:其它步骤同可执行行程序开发四.QT3到QT4移植参考QT3到QT4移植说明.doc五.Qt4生成ui类和派生的常用方法5.1.Qt4ui结构以mainwindows.ui为例:Mainwindows.h#ifndefMAINWINDOW_H#defineMAINWINDOW_H#includeQMainWindownamespaceUi{classMainWindow;}classMainWindow:publicQMainWindow{Q_OBJECTpublic:20explicitMainWindow(QWidget*parent=0);~MainWindow();protected:voidchangeEvent(QEvent*e);private:Ui::MainWindow*ui;};#endif//MAINWINDOW_HMainwindows.cpp#includemainwindow.h#includeui_mainwindow.hMainWindow::MainWindow(QWidget*parent):QMainWindow(parent),ui(newUi::MainWindow){ui-setupUi(this);}MainWindow::~MainWindow(){deleteui;}voidMainWindow::changeEvent(QEvent*e){QMainWindow::changeEvent(e);switch(e-type()){caseQEvent::LanguageChange:ui-retranslateUi(this);break;default:break;}}ui_mainwindows.h#ifndefUI_MAINWINDOW_H#defineUI_MAINWINDOW_H………………………QT_BEGIN_NAMESPACEclassUi_MainWindow21{public:…………………voidsetupUi(QMainWindow*MainWindow){……………………………………….}//setupUivoidretranslateUi(QMainWindow*MainWindow){MainWindow-setWindowTitle(QApplication::translate(MainWindow,MainWindow,0,QApplication::UnicodeUTF8));Q_UNUSED(MainWindow);}//retranslateUi};namespaceUi{classMainWindow:publicUi_MainWindow{};}//namespaceUiQT_END_NAMESPACE#endif//UI_MAINWINDOW_H类:Ui_MainWindow类:MainWindow命名空间Ui类:MainWindow调用setupUi初始化界面Ui_mainwindows.h由uiuic编译出来,是ui的实现,为基类Mianwindow继承Ui_MainWindow并使用Ui作为命名空间把Ui::MainWindow作为该类的变量包含包含22说明:后面使用界面变量时,需要在变量前加Ui5.1.Qt3移植后的结构移植后的程序会多两个文件以avcmodplatformlib的avccoordbs类为例:avccoordbs.h#ifndefAVCCOORDBS_H#defineAVCCOORDBS_H#includeui_avccoordbs.hclassavccoordbs:publicQ3MainWindow,publicUi::avccoordbs{Q_OBJECTpublic:avccoordbs(QWidget*parent=0,constchar*name=0,Qt::WindowFlagsfl=Qt::WType_TopLevel);~avccoordbs();protectedslots:virtualvoidlanguageChange();};#endif//AVCCOORDBS_Havccoordbs.cpp#include