编译:
必须通过"开始"菜单 -> "Microsoft Visual Studio 2005" -> "Visual Studio Tools", 运行命令行Visual Studio 2005命令行。再转到Qt4.3.2源码目录,配置命令参照网上相关文档configure -vcproj。
编译过程中,会问一个问题:是否接受GPL协议,选'y',经过一段时间以后,qmake被编译出来了。
接着编译代码,简单的敲入nmake即可,别人一步可以到位,可本人不行啊!其问题见下。
问题1:
解决:
下载zlib,本人下载的是123版
拷贝zlib1.dll到C:\WINDOWS\system32和D:\Program\Microsoft Visual Studio 8\VC\bin文件夹下
拷贝zdll.lib、zdll.exp、zlib.def到D:\Program\Microsoft Visual Studio 8\VC\lib文件夹下
拷贝zconf.h、zlib.h到D:\Program\Microsoft Visual Studio 8\VC\include文件夹下
设置工程属性页如下图
问题2:
编译src\plugins\imageformats时,出现以下情况:
qtiff缺少zlib.lib库,其解决办法同上。
qjpeg缺少libjpeg.lib库,因此下载GnuWin32,本人通过GetGnuWin32把全部东西都给下载下来了,并将其路径添加到windows环境变量中,不过对于libjpeg.lib这个库好像没有,不过他有jpeg.lib库,因此将其改名为libjpeg.lib。如此一来顺利编译。
问题3:
基本上Qt的全部库都编译的差不多了,现在就开始编译Qt工具了,其他Qt工具还行,没有出现什么问题,可是编译QtDesigner时确出问题了。这个问题目前还没法解决。也只能网搜学习了,还好编译一路来,所需的主要东西已经出来了。还是值得高兴一下的。本人将问题帖出来,希望有缘人能给我一些help。在此先谢谢了!
出错初步分析:
如果是连接错误,而生成obj文件又没问题,那么,问题应该出在QtDesignerd4.dll,其中这个dll文件中所包含的actioneditor.obj程序代码段,在编译过程中没有将连接错误中提到的函数编译进去,因此问题的关键是QtDesignerd4.dll出了问题。下面就应该是想办法将4给个函数编到里面去。由于QtDesignerComponents需要QtDesignerd4.lib因此QtDesignerd4.lib同样需要由QtDesigner生成。
进入Visual Studio 2005命令行,cd到D:\Gis\QGIS\qt\qt-win-opensource-src-4.3.2\tools\designer
qmake designer.pro
qmake -tp vc designer.pro
将Qt安装目录下的libQtScript.lib复制改名为QtScript4.lib
nmake
或者
修改designer.sln用notepad打开,将Microsoft Visual Studio Solution File, Format Version 10.00中的10.00改为9.00,另起一行添加# Visual Studio 2005,如此同法,修改其下所有的sln文件,即可用VS2005重新编译。
这个designer的编译把我编译的稀里糊涂的。不过最终还是稀里糊涂的把designer.exe给编译出来了。
为了让界面好看点本人修改了一下designer的main.cpp源码让其具有QCleanlooksStyle风格。
#include "qdesigner.h"
#include <QLibraryInfo>
#include <QDir>
#include <QCleanlooksStyle>
#include <stdlib.h>
int main(int argc, char *argv[])
{
Q_INIT_RESOURCE(designer);
// report Qt usage for commercial customers with a "metered license" (currently experimental)
#if QT_EDITION != QT_EDITION_OPENSOURCE
QString reporterPath = QLibraryInfo::location(QLibraryInfo::BinariesPath) + QDir::separator()
+ QLatin1String("qtusagereporter");
#if defined(Q_OS_WIN)
reporterPath += QLatin1String(".exe");
#endif
if (QFile::exists(reporterPath))
::system(qPrintable(reporterPath + QLatin1String(" designer")));
#endif
QDesigner app(argc, argv);
QDesigner::setStyle(new QCleanlooksStyle);
app.setQuitOnLastWindowClosed(false);
return app.exec();
}
效果如下,比以前的更有线条了呵,哈哈!
试编一个小程序:
源码如下,保存为main.cpp
#include <QApplication>
#include <QPushButton>
int main( int argc, char * argv [] )
{
QApplication app(argc, argv);
QPushButton hello("Hello world!");
hello.resize(100, 30);
hello.show();
return app.exec();
}
命令行:
qmake -project
qmake -t vcapp