Archive for the 'Windows技术' Category

用git bisect寻找程序中引入change的位置

提前声明,本文可以说和Qt关系很大, 也可以说和Qt毫无关系,如果对git没兴趣的看官可自行绕过…
git是目前Qt及其相关项目开发官方使用的代码管控工具, 我们在前面的blog中已经介绍了如果用git访问Qt项目和QtCreator项目, 详细的信息可以在下面两篇帖子中找到:
从Qt仓库获取最新代码的新手指南
QtCreator官方Git上手指南
要说git确实是个不错的工具, 如果仅仅用它做代码版本管理真有点屈才。 本文就介绍一个git的好功能, 希望对大家有用。
Git bisect
bisect这个关键字应该写成bi-sect大概更好理解, 学过算法的人应该对这个“bi-”不陌生吧? 对了,就是“二分”的意思。 顾名思义, 这个bi-sect就是做代码的二分, 而且是在两个change之间做二分。 这种二分有什么用处呢? 聪明的同学应该已经想到了吧? 既然是在change之间做二分当然是为了定位某个change, 所以一般情况下这个bisect用于寻找某项对功能产生影响的修改, 如假设某个change给代码里引入了bug, 我们可以通过在好版本和坏版本之间做二分最终定位到引入bug的代码修改; 同理, 如果某个bug被修正了, 我们的当务之急是找到bugfix, 但是在每天几十几百个增加的修改中寻找一个change那无异于大浪淘沙大海捞针(举个例子, 笔者统计了一下, 从Qt4.5.3到Qt4.6.0之间的change数量是超过五千个…请大家闭上眼睛想象一下如果在这些change里找到你感兴趣的那个change还有什么好方法。), 这时二分定位就显得十分必要了。

Read More...

Tags: , , ,
Posted on March 29th, 2010 in Linux技术, Qt技术, Windows技术 | 1 Comment ».

基于vs2005以上版本Qt程序发布的注意事项

最近发现了一个非常恼人的程序deployment的问题,估计大家有可能也会遇到,特此memo。
问题的出现我觉得主要还是微软搞的花头太多, 一个不知所谓的manifest文件让本来简单的程序发布变得困难重重。 找了找关于manifest的介绍,貌似这个文件是用来描述程序或者库的依赖关系, 特别是对程序依赖的版本进行描述, 这样系统可以通过manifest的内容找到正确的库版本。 理论上讲这个dd确实是不错, 可以解决版本不兼容的问题, 保证程序运行的时候用的是指定版本的库。 不过实际操作起来麻烦事一箩筐。
笔者对vs/windows编程十分之菜,可能理解的有所偏差, 欢迎指正。 大概也是从vs2005以上的版本开始程序编译时对这个manifest要求更严格了? 要么可以将manifest信息内嵌到程序里,要么就在发布程序的时候带上这个manifest文件才能保证程序找到依赖的外部库。 Qt相对这种情况也在build system内部做了相应的调整, 目前的状况是默认把manifest内嵌在binary里, 包括库、程序和插件。
按照Qt文档的说法, 发布基于vs2005以上版本的Qt程序有两种方法, 一是把vc的crt目录Microsoft.VC80.CRT拷贝到程序路径下与程序一起发布; 另外一个是在目标机器上安装vc的redistribution package。 实际上经过笔者的实验, 第一种方法行不通, 常见的症状是按照文档做了程序不能启动,或者是插件无法载入。 找了个专家咨询了一下,发现问题就出在内嵌的manifest信息上。 由于Qt库内嵌了manifest信息, 程序运行的时候系统只会到固定的位置寻找vc的库,根本就不搜索本地的路径。 笔者的试验结果是即使把vc的库放在与程序exe相同的目录下都找不到,真是奇怪哉! vs2005的程序还没遇到过这样的情况哦!
专家给出的意见是要么安装vc的redistribution package, 这个是肯定能行的。 还有一种方法是在编译Qt时在pro里加 CONFIG-=embed_manifest_dll (这一点和文档上说的似乎是相反的,可见Qt的文档有谬误。), 编译的插件也需要在pro里加 CONFIG-=embed_manifest_plugin, 包括我们的程序pro里要加 CONFIG-=embed_manifest_exe, 这样才圆满了! 这种做法的原理是程序里不嵌入库的版本和路径信息, 系统就会按照传统的方式搜索匹配的库,也就会搜索到程序所在的路径或者是文档里提到的Microsoft.VC80.CRT路径等等。
各位看官谁家有vs2005以上的版本并遇到了类似问题可以试验一下, 成功与否来冒个泡。 笔者这里没有vs2008可测试,不过想想觉得这个方案还是比较靠谱的。

Read More...

Tags: , , ,
Posted on March 22nd, 2010 in Qt技术, Windows技术 | 12 Comments ».

Qt4 DirectFb大测试

不知道具体从Qt4的哪个小版本开始, QtEmbedded提供了基于DirectFb的绘制插件, 也就是说理论上利用该插件Qt可以基于DirectFb的绘图机制来画Qt自己的界面, 同时理论上也应该可以利用上DirectFb提供的图形加速机制。
前面说的都是理论上, 具体如何还是得事实说话。 今天我们就来讨论讨论Qt4对DirectFb的支持究竟到什么程度, 以及我们怎么才能测试该功能。
书归正传。 可能很多小朋友还不知道DirectFb提供有与X11的集成, 可以通过DirectFb的接口直接操作与X11集成的显卡驱动。 这句话听着有点坳口…呵呵, 其实笔者写出这句话来还有点怀疑可能哪里写的不符合事实了。 简单点说吧, DirectFb可以把自己获得的数据转到X11的窗口去, 有点类似QVFb的功能 -- 这样说是不是能明白点?  通过QtEmbedded->QtDirectFb->DirectFb->X11, QtEmbedded的widget就被画到了一个X11窗体上, 我们可以把这个X11窗体看成是DirectFb基于X11的模拟器。
我们来一步一步看怎么才能在自己的Linux上测试这一功能。
安装DirectFb的包
以笔者的OpenSuSE11为例。 打开yast->Software manager, 搜索“DirectFb”。 需要安装DirectFb 和 DirectFb-devel两个包。
编译QtEmbedded
QtDirectFb插件可以在configure时指定编译, 用下面的参数:
configure -qt-gfx-directfb [other options]
如果你configure时忘记加该参数也没有关系, 可以在普通编译之后单独编译该插件:
cd $QTEDIR/src/plugins/gfxdrivers/directfb
make; make install

Read More...

Tags: ,
Posted on October 28th, 2009 in Linux技术, Qt技术, Windows技术, 随笔类 | No Comments ».

Nokia 论坛Qt开发者培训资料

本月21至23号,本人有幸参加了诺基亚在北航举办的Qt开发培训,是免费的哦,来参加的人员有很多是Nokia手机的第三方开发商,当然也有新浪腾讯等 大型互联网公司无线部门的开发者,看来Qt渗透力很强。而且提供午餐,早上下午都提供茶歇,有零食和水果供应,看来Nokia不差钱。培训师是来自于芬兰 的Niemi Petri,英语比好多芬兰人要好,课程讲得深入浅出,很好理解。课程内容涉及Qt的基本知识,以及Qt在S60和Maemo上的开发。
课程上还有课堂练习,下面我就把培训的PPT和作业以及演示代码传到我们网站上分享给没去参加的朋友。
qt_for_mobile_slides_day_1(Qt 偏底层知识,for windows/S60)
qt_for_mobile_slides_day_2(Qt 偏上层知识,for windows/S60
qt_for_mobile_slides_day_3(Maemo 开发)
exercise_day_1
demos_day_2

Read More...

Tags: , ,
Posted on October 24th, 2009 in Qt技术, Windows技术 | 8 Comments ».

从Qt仓库获取最新代码的新手指南

大家如果经常上Qt的官网可能注意到Qt从发布4.5开始开放了源代码仓库,并且邀请广大开源爱好者贡献自己的力量。 有兴趣有能力的同学们可要加油了哦~
当然大多数同学还是像我这样有兴趣但没能力的,不过也不用太着急,我们仍然有监督的权力,呵呵。
Qt的源码仓库
Qt的源码仓库用git做版本管理,提供浏览器可以访问的界面, 随便拿个browser就可以浏览仓库里的文件内容。
仓库的位置在 http://qt.gitorious.org/qt/qt
如果要下载源码其实也比较方便, git有不同平台的客户端,所以不管你用windows还是linux都可以很容易地获得最新的Qt源码并对其进行编译和验证。 几乎所有的Linux发行版都带了git的安装包,现成可用。 安装好git之后用下面的命令下载源码:
git clone git://gitorious.org/qt/qt.git
这样你拿到的是默认源码分支“master”。 用”git branch”命令可以看到当前工作的分支。
而用下面的命令可以查看Qt所有的源码分支:
git remote show origin

Read More...

Tags: , , ,
Posted on October 23rd, 2009 in Linux技术, Qt技术, Windows技术, 随笔类 | 6 Comments ».

带着插件一起走续篇 - 诊断插件的载入错误

在前面的文章中笔者已经花很多篇幅介绍了打包和发布Qt程序需要做哪些工作, 新来的看官可以翻翻以前的帖子扫盲一下再继续。
如何打包发布基于Qt4 Windows的软件
打包发布的TIP:带着插件一起走

在《带着插件一起走》一文中讲到一个开发人员常见的问题 - 某些插件无法载入, 初学者最可能遇到的情况是插件没有和应用程序一起打包发布, 导致Qt程序找不到插件进而影响到程序的功能(如图片格式不支持, 数据库打不开等); 另外还有一些不太容易想到的情况也会导致插件无法载入, 本文就着重讨论这方面的内容。

Read More...

Tags: , ,
Posted on October 15th, 2009 in Linux技术, Qt技术, Windows技术 | No Comments ».

浅入深出在Win XP上傻瓜式编译安装Qwt续——编译QtCreator

最近很多同学们反映QtCreator编译问题一堆,这让我很意外,因为在当时,我是花了一杯咖啡的时间编译完成然后复制过去就搞定了。主要分析大家的原因,得出来这些结论:
1.不熟悉Qt程序的发布,教程没写到编译好怎么办,因此就不知道接下去该如何;
2.没搞清楚Qt SDK和Qt lib关系,所以对于我在前面把编译好得qwt库文件移来移去无法理解,不知道这样移来移去有什么用
3.编译qt小程序不怕,但编译QtCreato这样的工程就不知道该怎么做了
那接下来就对以上几个原因一一详细说明。
首先是最重要,就是QtCreator的编译,可以浓缩为以下步骤
1.先下载QtSDK for Windows,然后安装
2.下载qwt,按照前面的教程编译
3.下载QtCeator,解压到任意的英文目录,打开源码目录下的qtcreator.pro,用已有的QtCreator编译,注意两点,第一点是应该设置为release版,第二是只需要编译即可。
完成这几步后就可以进行发布,也就是把编译完成的QtCreator替换掉原来安装的Qt SDK里的QtCreator,如果只是简单地复制过去,肯定缺少DLL文件的提示。简单的解决办法就是点击exe,显示缺失xxx.dll文件,然后从 盘符:\Qt\2009.03\qt\bin里拷贝过去,当能正常打开时,把bin目录和share复制到 盘符:\Qt\2009.03下即可。至于环境变量,既然是傻瓜式,就不用考虑很多,原有的 盘符:\Qt\2009.03\bin目录下有个qtenv.bat文件,把它保留下来即可。
在完成以上工作后,如果能正常启动QtCreator,就按照前面的教程把Qwt文件拷贝过去,最后就能如愿地在QtCreator设计器里看到Qwt部件的出现了。
相信经过这样讲解,大家都应该能完成qwt的集成,而最重要的是思考下,这样做的深层次原因,明白这其实集成了Qt程序发布,Qt设计器插件的集成等知识点,真正理解后,方能明白为什么是浅入深出,浅是指简单地流程,深是指Qt应该程序编译安装的原理。明白以后,以后再win下发布程序就变得非常清晰明了。

Read More...

Tags: ,
Posted on October 13th, 2009 in C++, Qt技术, Windows技术 | 7 Comments ».

浅入深出在Win XP上傻瓜式编译安装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的部件。

Read More...

Tags: ,
Posted on September 17th, 2009 in C++, Qt技术, Windows技术 | 7 Comments ».

浅入深出在Win XP上傻瓜式编译安装Qwt(中)

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

Read More...

Tags: , ,
Posted on September 6th, 2009 in C++, Qt技术, Windows技术 | No Comments ».

打包发布的TIP:带着插件一起走

前面的blog里有一篇专门讲程序如何打包发布的问题(如何打包发布基于Qt4 Windows的软件), 但有一个问题点有所缺失,那就是如何处理插件。 插件在Qt中应用十分广泛,是个非常非常重要的概念, 简单举几个例子大家就能明白它的重要性了。 如:
- 程序本机运行正常, 发布后说找不到数据库驱动
- 程序本机正常,发布后某些格式的图片无法显示(如jpeg)
- 程序本机中文显示正常,发布后出现段错误(实际上是中文的codec指针返回空值造成空指针操作)
以上这些情况笔者见过无数人询问, 归其根本, 就是发布环境中Qt找不到对应的插件, 可能的原因是发布的包里缺少插件或者是插件没有存放在正确的位置。
客观的说,上述问题在Qt文档里都能找到答案。 再客观的说, Qt文档之多让人乍舌, 要想在这些文档中很快找到我们需要的东西绝非易事。 如果大家去看看笔者发现该问题答案的文档(How to Create Qt Plugins),估计能囧死, 它藏在一个极其不起眼的小角落。 甚至还有更囧的, 有些文档里写的和现实还有些出入(Using qt.conf),按文档所写路径放置插件程序依然搜索不到。 究竟插件在发布时应该放在什么位置上才能被正确载入呢? 其实结论很简单 — 默认的搜索路径是应用程序所在路径的 ./type/下。
这个type指代插件的类型, 也就是插件文件的上一级目录。 以图片类型插件为例,这个type就是imageformats目录。
即打包发布之后有 appdir/imageformats/qjpeg4.dll 文件就可以保证jpeg类型的图片能正确载入和显示, 这样说够清楚了吧? 以此类推, 其他插件必然难不倒大家!

Read More...

Tags: , ,
Posted on September 4th, 2009 in Linux技术, Qt技术, Windows技术 | 7 Comments ».