分享

浅入深出QWT

 guitarhua 2012-11-30

浅入深出QWT

现在看到的本文已经是第三版,写这篇博文的起初原因是本菜菜最近准备使用Qwt开发一些功能部件,而公司里基本是使用win Xp系统进行开发工作,为了便于日后的团队开发,所以研究了怎么将qwt库和QtCreator整合起来。但是由于不是很严谨的态度,但随便的实验感觉成 功后,感觉整合没问题后,就轻松地写了篇博文,幸亏由于shiroki大姐的指出,才发现许多不足,甚至是严重的错误会误导别人。通过双休日的不懈努力和 研究,总算实验成果,并且证实了本菜菜的思路,而且对于Qt更加了解,对以前缺少的知识点也得到了补足,这个内容么,也真正做到的浅入深出。在基于Qt绘制科学图表 -- Qwt试用中,shiroki大姐介绍了怎么样在linux下安装qwt,并使用qwt,本菜菜经过在winXp操作系统下的不断尝试,发现能快速地使用Qt Creator进行编译,而在开发程序时也能使用Qt Creator进行,故详细地介绍给大家。

首先确定你使用的是winXP操作系统,并且已经安装了Qt SDK for windows,如果没有安装,可以去Qt官方网站下载安装包安装,安装的过程十分简便,跟普通的windows的EXE安装包没有太大区别,指定好路径,一路next就可以安装,在安装完成后,也无需设置环境变量即可使用来编写编译Qt程序。

安 装完毕后,即可使用QtCreator,然后去下载qwt的源代码,目前的版本为qwt-5.2.0,在前面文章中提供过项目主页地址,在项目主页地址下 可以选择下载对应linux的tar源码压缩包或者对应win的zip源码压缩包,我们选择的自然是zip压缩包,然后下载完成后,解压在英文路径下的目 录即可。

有了Qt SDK,qwt的编译过程自然就变得简单无比了,环境变量啊,Qt的lib库啊,一切都有Qt SDK帮助,这就是为什么是我想说傻瓜式安装qwt的原因。相比以前的编译,安装和设置环境变量,使用Qt Creator可以帮助简化步骤。

打开Qt Creator,打开qwt源码目录下的.pro工程文件,然后点击左下的run按钮,qwt就开始了自动编译的的过程:

编译过程需要5到10分种时间,可以坐下别的事,或者喝杯咖啡什么的>_<,并且Qt Creator帮助我们做好一切工作,我们只要等待编译完成就可以了。

当 编译完成后,只要完成最后一步就可以在winXP上使用QtCreator来编写qwt相关程序,并且在Qt设计师里使用qwt的部件。在编译完成qwt 目录下,有lib目录和designer目录,将lib目录里的qwt5.dll文件拷贝至qt sdk的目录下的qt目录的bin目录中(比如本菜菜为F:\Qt\2009.03\qt\bin),将libqwt5.a文件拷贝至对应的lib目录 (如F:\Qt\2009.03\qt\lib),最后将designer目录下的plugins目录的designer目录(真绕口啊囧)下的 libqwt_designer_plugin5.a文件和qwt_designer_plugin5.dll拷贝到跟上面一样对应的plugins目录 下的designer目录(如F:\Qt\2009.03\qt\plugins\designer),看起来十分繁琐,其实是非常简单的过程。

好吧,如果真是这样用真的就太美好了,真的是傻瓜式的安装,只要编译好将库文件复制过去,这真是容易极了。。。

但是事与愿违,这一切只是浅入的开头,真正的深出还在后面,以上这样步骤可以视为是准备qwt库的过程,而真正要写qwt还有很重要的步骤,本菜菜将放在下一篇详细解说,如果你想在winXP上使用qwt,就请先按这些步骤完成吧。

在上篇中,介绍了如何使用QtCreator编译安装qwt,现在介绍怎么使用QtCreator来编写使用了qwt库的qt程序。

为 了简化流程,本菜菜直接复制了qwt中example的代码,并且使用QtCreator新建一个工程并将代码粘贴进去。这时如果误以为只要点击run就 可以运行程序,那就是大错特错了。本菜菜开始时就犯了如下的错误,不幸的是,是直接使用了qwt目录里的example,而里面的pro工程文件可是设置 完毕的,只要生成了库文件dll和libxx.a的文件情况下,自然是可以运行的。本菜菜就是这样被蒙蔽了,才造成qwt库设置完毕的假象。

这时如果点击run,多半会出现以下错误:

简 单地来说,就是QtCreator找不到qwt库中各个类型的声明。解决的办法也很简单,将qwt的头文件包含进去即可。去qwt的解压目录,在下面有个 src目录,里面就有所有qwt的源码文件,将其中的.h头文件复制出来,然后去Qt SDK的安装目录,在下面的qt子目录的include目录里(比如F:\Qt\2009.03\qt\include)新建一个Qwt文件,将复制出来 的.h文件粘贴进去。

Qwt毕竟是第三方库,指望QtCreator能自动认出来,还需要在.pro里文件设置LIBS和INCLUDEPATH ,这些属于qmake的知识范畴内,有兴趣的朋友可以去看看文档qmake手册部分:http://qt./doc/4.5/qmake-manual.html.

本菜菜的设置如下:

LIBS += -L”f:/Qt/2009.03/qt/lib” -lqwt5

INCLUDEPATH += f:/Qt/2009.03/qt/include/qwt

各人设置爱好都不一样,大家可以根据自己的需求来设置。

上面这些步骤浓缩起来时很简单,但在一无所知地情况下,本菜菜花费了大量的时间来尝试,可谓步步都留下辛勤的汗水。

恐怕很多在想了,现在总可以正常使用qwt了吧,好吧,我也是这样想的,结果却是:

真 是很郁闷的错误啊,然后又花费了大量的时间进行研究,原因其实也很简单,在winXP下面,Qt是不能混用库的。在QtCreator下面,默认编译运行 的是debug模式,而本菜菜编译出来的是release库,自然就不行了。这时设置QtCreator为release模式,就能运行程序,但这样,调 试怎么办了?

当然,只要编译qwt生成debug库文件,自然就可以在QtCreator下使用debug模式编译使用。

这是,去qwt的源码目录,打开qwtconfig.pri文件,可以使用记事本,也可以使用类似UltraEdit的软件工具,在里面找到这段:

win32 {
        # On Windows you can’t mix release and debug libraries.
        # The designer is built in release mode. If you like to use it
        # you need a release version. For your own application development you
        # might need a debug version.
        # Enable debug_and_release + build_all if you want to build both.

        CONFIG            += debug     # release/debug/debug_and_release
        #CONFIG           += debug_and_release
        #CONFIG           += build_all
    }

修改成为

    win32 {
        # On Windows you can’t mix release and debug libraries.
        # The designer is built in release mode. If you like to use it
        # you need a release version. For your own application development you
        # might need a debug version.
        # Enable debug_and_release + build_all if you want to build both.

        #CONFIG            += debug     # release/debug/debug_and_release
        #CONFIG           += debug_and_release
        CONFIG           += build_all
    }
    else {
        CONFIG           += release     # release/debug
    }
}

然后按照上篇中的编译流程,最后把生成的dll和.a文件拷贝过去即可,其中,如果是debug的文件,文件名会多个d,比如qwtd5.dll,而在QtCreator里运行debug模式,也需要在.pro文件里稍作修改:

LIBS += -L”f:/Qt/2009.03/qt/lib” -lqwtd5

INCLUDEPATH += f:/Qt/2009.03/qt/include/qwt

最后,程序总算能成功运行了,整合到设计器的部分就请等下篇吧

在上和中篇中,通过一些列简单的配置,我们可以方便在WinXP上编译安装Qwt库,并且对pro文件作少需修改,就可以顺利的使用Qwt库开发程序。

对 于习惯敲代码的人来说,到这步已经足以满足开发的需求,但对于要求快速应用开发或者是习惯于Qt设计器的开发人员来说,这还远远不够。细心的人可能会觉 得,前面把库文件复制过去了,不是应该已经集成到了Qt设计器里么。这样想的人可以说,对于Qt SDK是不甚了解,Qt SDK是由两部分组成,Qt Creator 和Qt 库,没有Qt Creator,照样能使用Qt库写程序,没有了Qt库,Qt Creator可干不了什么。

在上中,我做的紧紧是把Qwt库集成到了Qt库中,如果启动Qt的库的设计器,自然就能看到旁边可选择得Qwt部件,而在QtCreator的设计器中,是不会出现Qwt的部件。

以 此类推,解决的办法就是讲Qwt插件文件复制到QtCreator的bin目录下去,如我就是F:\Qt\2009.03\bin\designer。假 如这能一次性成功,那该是多么好的事情,现实是残酷的,QtCreator中的设计器显示该插件无法加载,而错误信息显示:
“The plugin uses incompatible Qt library. Expected build key “Windows msvc relase full-config”, to “Windows mingw release full-config”.

明明Qt库是用mingw编译,为什么会出现msvc编译器呢?于是仔细查找了有关资料,发现以下这段话:

The version of QT Creator shipped with the QT SDK Open Source version for windows is build using Visual Studio, whereas the SDK is build with and supports g++ (MinGW). This doesn’t cause too many problems, but it totally defeats building and installing QT Designer plugins into QT Creator. The error message is:

Expected build key “Windows msvc release full-config” got “Windows mingw release full-config”

结果非常清晰了,Qt SDK for Windows的两部分是由不同编译环境编译而成,QtCreator是由msvc编译,Qt库是由mingw编译,我们编译出来的Qwt库是基于mingw的Qt库,自然就不能被QtCreator识别。

那解决的办法也自然出来了:
It can be solved three different ways:

1) Build QT Creator from source with MinGW
2) Build the plugin with Visual Studio
3) Build QT Creator with build key checking turned off.

相信这样的英文难不倒各位,而我选择了第一种办法,嘿嘿,只要拿现有的QtCreator把从官下载的QtCreator源码编译下,不就OK了么,多么easy的过程。看过上的同学们应该能很轻易的完这步骤。

重新使用编译完的QtCreator后,Qwt部件总算出现了,漫长繁琐的文章也到此为止,希望大家都能顺利地使用上Qwt库。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多