其实参与QtCreator开发也很容易^_^

老邓 2011-10-11 11:25:04
加精
10个月前发过一个组建Qt团队,共同研究、学习、完善QtCreator的帖子,不过在为QtCreator提交完一个补丁后,就没有再继续了。
期间心里一直抱有歉意:名不符实的一个倡议。

近期在使用专门为KDE打造的发行版Chakra时,感觉很对自己的品味。
自然,也离不开QtCreator这个用Qt写的开源跨平台IDE了。

感觉QtCreator的开发是非常专业的,代码的质量非常高!
而且,参与开发的人比较多,比较热闹:你写的合并请求,总会有开发人员来检查,并提出一些很好的建议。这对自己的编程能力提高是有帮助的。

而且我发现:要参与QtCreator的开发,并不需要多少Qt的知识。
我只看了Qt开发入门教程的前三章(汗:《Windows程序设计》上下册都买了,也只看了前三章),觉得已经可以上手了。
如果遇到一些Qt相关的问题,只要查文档以及Google,一般都可以解决。
同时,在QtCreator的现有代码中查找相应用法,也是一个比较好的手段。

近期陆续提供了一些合并请求,也使得自己对Git的运用明显得心应手了,欣喜。
通过这些请求中的代码修改可以发现,参与QtCreator的开发也很容易!
https://qt.gitorious.org/qt-creator/qt-creator/merge_requests/382
https://qt.gitorious.org/qt-creator/qt-creator/merge_requests/397
https://qt.gitorious.org/qt-creator/qt-creator/merge_requests/398
https://qt.gitorious.org/qt-creator/qt-creator/merge_requests/401
https://qt.gitorious.org/qt-creator/qt-creator/merge_requests/402
https://qt.gitorious.org/qt-creator/qt-creator/merge_requests/403
https://qt.gitorious.org/qt-creator/qt-creator/merge_requests/404

另外,我提交的一个纯C++工程(不依赖Qt库)也被开发者采用了。同时,开发者还创建了一个基于纯C的工程。
这样,QtCreator就可以充当C/C++开发、学习的一个IDE了。

我现在在Linux平台下使用GCC/GDB,而在Windows平台下使用的却是MSVC/CDB。
发现QtCreator的一个非常优势的地方是:调试器非常好用!
STL的容器也好,Qt的容器也好,结果输出都很友好。
而代码完成功能,在开源IDE里,也仅次于Eclipse CDT了。

下面是我写的一个Windows平台下的处理:用于编译QtCreator的。
大家要注意:文档要单独编译,之后还要在QtCreator的设置里添加开发文档。
通过阅读开发文档,可以帮助了解QtCreator的架构。
@echo off

qmake "CONFIG+=release" ..\QtCreator\QtCreator.pro
jom && nmake docs

if %errorlevel% neq 0 goto error

set DESTDIR=D:\MrDeng\DEVx86\qt
nmake INSTALL_ROOT=%DESTDIR% install

rem qtcreatorcdbext32
if not exist %DESTDIR%\lib\qtcreatorcdbext32 mkdir %DESTDIR%\lib\qtcreatorcdbext32
xcopy /D /Y %~dp0\lib\qtcreatorcdbext32\*.dll %DESTDIR%\lib\qtcreatorcdbext32
rem dlls
xcopy /D /Y %~dp0\bin\*.* %DESTDIR%\bin
rem docs
xcopy /D /Y /S /I %~dp0\share\doc %DESTDIR%\share\doc
rem translations
rmdir /S /Q %DESTDIR%\share\qtcreator\translations

goto success

:error
echo 编译失败!
goto finish

:success
echo 编译成功!
goto finish

:finish


这是我用来编译Qt的:
一、编译动态发布版
修改编译选项(mkspecs\win32-msvc2010\qmake.conf):
QMAKE_CFLAGS_RELEASE = -O2 -Os -MD
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -Os -MD -Zi
修改链接选项:
QMAKE_LFLAGS_RELEASE = /INCREMENTAL:NO /OPT:REF /OPT:ICF
QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO = /INCREMENTAL:NO /DEBUG /OPT:REF /OPT:ICF
修改完成后,备份qmake.conf,然后替换所有“ -Zi”和“ /DEBUG”为空,目的是编译Qt库时不生成pdb文件。
编译Qt库结束后,再恢复“ -Zi”和“ /DEBUG”选项。

配置:
configure -confirm-license -opensource -prefix D:\MrDeng\DEVx86\qt -debug-and-release -shared -platform win32-msvc2010 -fast -no-qt3support -nomake demos -nomake examples -nomake translations

编译安装:
1. 拷贝目录mkspecs至D:\MrDeng\DEVx86\qt
2. nmake && nmake install

后期处理:
1. 清除重复的DLL(将qt\lib目录中的DLL全部删除)
2. 清除多余的帮助文档(先运行qt\bin\assistant.exe,以便更新qt\doc\pch;然后删除qt\doc\src和qt\doc\html)
3. 还原qmake.conf,恢复“ -Zi”和“ /DEBUG”选项

私有头文件:
xcopy /S /I include\*_p.h ..\include
xcopy /S /I src\*_p.h ..\src
在Qt源码目录中执行上述命令,之后将..\include和..\src目录拷贝到D:\MrDeng\DEVx86\qt中!

演示与示例:
1. 重新配置及编译安装
configure -confirm-license -opensource -prefix D:\MrDeng\DEVx86\qt -release -shared -platform win32-msvc2010 -fast -no-qt3support -nomake demos -nomake examples -nomake translations
cd demos && nmake && nmake install && cd .. && cd examples && nmake && nmake install && cd ..
2. 删除demos目录下*.exe
3. 删除examples目录下所有release目录及*.exe
4. 为demos和examples目录下所有文件添加只读属性

二、编译静态正式版
修改编译选项(mkspecs\win32-msvc2010\qmake.conf):
QMAKE_CFLAGS_RELEASE = -O2 -Os -MT
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -Os -MT -Zi

修改链接选项:
QMAKE_LFLAGS_RELEASE = /INCREMENTAL:NO /OPT:REF /OPT:ICF
QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO = /INCREMENTAL:NO /DEBUG /OPT:REF /OPT:ICF

配置及编译:
configure -release -platform win32-msvc2010 -fast -static -opensource -no-qt3support
nmake


通过这些方法得到的Qt开发环境,其实只有269MB。
附带上MSVC编译器绿色版,以及一些工具等,也才675MB
通过配置QtCreator绿色版,打包后137MB,可以在任何一台电脑上解压并且进行开发了。
感兴趣的朋友可以体验下。
...全文
5040 122 打赏 收藏 转发到动态 举报
写回复
用AI写文章
122 条回复
切换为时间正序
请发表友善的回复…
发表回复
noodle123 2011-11-26
  • 打赏
  • 举报
回复
楼太高,标记一下自己不恐高。。。
frogoscar 2011-11-25
  • 打赏
  • 举报
回复
Qt好东西阿~~~~~~
三条猫 2011-11-18
  • 打赏
  • 举报
回复
神贴,MARK一下。
xunxun 2011-11-18
  • 打赏
  • 举报
回复
也就是说这个处理是Qtcreator的更改,暂时没有补丁更改gdb

那么可以在cb里做同样的修改

对于wx我还是用的2.8.x,不过是svn分支
ollydbg23 2011-11-18
  • 打赏
  • 举报
回复
[Quote=引用 113 楼 loaden 的回复:]

引用 111 楼 ollydbg23 的回复:
不过我个人还是觉得wxWidgets挺好,将来我考虑去申请cb开发者吧,
绝对支持!
wxWidgets的稳定性还是不行。
换2.9.x后,直接库里就有死循环。
导致CC根本无法使用。

而且,3.x别说今年年底出不来,即使明年年底了,也出不来。
所以现在都不敢在实际项目中使用wx了。
[/Quote]
谢谢!

关于不同wxWidgets版本的问题,我觉得最关键的一点是,wxWidgets2.9.x的版本里面,对wxString的实现进行了大量的修改,这个修改主要是在Windows下,实际是一个wchar的数组,而在linux下,是一个utf8的数组,这样一来,原来的CC里面,记录Index的方法就不能通吃了。(以前的wxWidgets,实际上在Linux和Windows下都是使用wchar数组的)。

我估计问题是出在wxString的改动上。

关于qtcreator里面的debugger helper,我看了一下:基本我的想法是正确的,可以看下面的链接和文字:

http://doc.qt.nokia.com/qtcreator-2.2/creator-troubleshooting-debugging.html#debugger-displays-not-in-scope-message

Debugger Displays <not in scope> Message

The message is created by the debugging helpers. Qt Creator posts an expression to the GDB command line to invoke the debugging helpers. The expression includes the address of the object to examine. This address might be modified by GDB before the helper function is called. It is unclear why and when this happens, but if it happens, the debugging helpers operate on wrong data and come to wrong conclusions. Most likely, they find garbage and declare the variable to be <not in scope>.

老邓 2011-11-18
  • 打赏
  • 举报
回复
[Quote=引用 114 楼 ollydbg23 的回复:]
http://doc.qt.nokia.com/qtcreator-2.2/creator-troubleshooting-debugging.html#debugger-displays-not-in-scope-message
[/Quote]
注意是2.2的文档了。
你得看最新的文档。
我记得2.3之后,cdb是重写了。
原来是需要debug helper的,现在不需要了。
codesnail 2011-11-18
  • 打赏
  • 举报
回复
大神啊,膜拜。。。。。
老邓 2011-11-17
  • 打赏
  • 举报
回复
[Quote=引用 105 楼 ollydbg23 的回复:]
看起来你从codeblocks跳槽去QT阵营了啊,呵呵。
[/Quote]
感觉Code::Blocks的开发不给力,开发氛围不好,太保守。
这个原来在邮件里和你们聊过的。

QtCreator有纯C/C++工程了。我正在提交review,要求加上CMake纯C/C++工程。
这样,即使没有Qt库,也可以进行C/C++开发了。
xunxun 2011-11-17
  • 打赏
  • 举报
回复
[Quote=引用 106 楼 ollydbg23 的回复:]

对了,老邓,不知道QTCreator里面,对于未初始化的函数局部变量,在调试的时候会是什么样子?这个问题困挠多年了,例如vector之类的话,如果在gdb+python的组合下,往往会导致gdb崩溃,不知道qtcreator是何种策略避免这些崩溃?
[/Quote]
搜索这个出来一堆
https://bugreports.qt.nokia.com/secure/IssueNavigator.jspa?pager/start=50

关键词为:crash gdb python

另外,qtcreator似乎要求windows gdb打两个补丁,一个是gdb-increased-dcache-line-size.patch
一个是gdb-expand-line-sal-maybe.patch

还有一个实验性的性能补丁:gdb-without-dwarf-name-canonicalization.patch

这些qtcreator2.3.1是提供的
ollydbg23 2011-11-17
  • 打赏
  • 举报
回复
对了,老邓,不知道QTCreator里面,对于未初始化的函数局部变量,在调试的时候会是什么样子?这个问题困挠多年了,例如vector之类的话,如果在gdb+python的组合下,往往会导致gdb崩溃,不知道qtcreator是何种策略避免这些崩溃?
ollydbg23 2011-11-17
  • 打赏
  • 举报
回复
看起来你从codeblocks跳槽去QT阵营了啊,呵呵。



另外,我之前为了使用嵌入式的armlinux系统,玩过QTcreator,感觉它里面居然没有纯c++的工程,真是悲剧,你的贡献不错!
老邓 2011-11-17
  • 打赏
  • 举报
回复
[Quote=引用 111 楼 ollydbg23 的回复:]
不过我个人还是觉得wxWidgets挺好,将来我考虑去申请cb开发者吧,[/Quote]
绝对支持!
wxWidgets的稳定性还是不行。
换2.9.x后,直接库里就有死循环。
导致CC根本无法使用。

而且,3.x别说今年年底出不来,即使明年年底了,也出不来。
所以现在都不敢在实际项目中使用wx了。
老邓 2011-11-17
  • 打赏
  • 举报
回复
未初始化的局部变量可以显示出来,提示<not in scope>,直到初始化为止。
我目前还没有看懂QtCreator的框架。
ollydbg23 2011-11-17
  • 打赏
  • 举报
回复
[Quote=引用 109 楼 loaden 的回复:]
未初始化的变量在调试的时候,没有任何崩溃现象。
[/Quote]
我不清楚qt是如何实现的,这些未初始化的变量,能在local下面显示出来么?还是说根本就不显示出来?

如果能显示出来(虽然可能变量内容没有),那我觉得多半qtc里面加了很多check,比如vector的长度啊之类的限制,不能是负数等等,加了多个check之后,出现崩溃的概率几乎就很小了。

另外,loaden你如果有空,帮忙看看qtc里面这些调试脚本的显示是怎么弄的,我想它不外乎最终也是调用很多gdb的命令。

关于你说的:感觉Code::Blocks的开发不给力,开发氛围不好,太保守。
我觉得主要是CB的人气还不够旺,呵呵。不过我个人还是觉得wxWidgets挺好,将来我考虑去申请cb开发者吧,哈哈,不过最近太忙,不可能有时间搞cb开发了。。。。。我实在是佩服codelite的开发者eranif,这家伙似乎是一个人把codelite给弄起来的,而且codelite功能也相当强大!!

老邓 2011-11-17
  • 打赏
  • 举报
回复
[Quote=引用 107 楼 xunxun1982 的回复:]
搜索这个出来一堆
https://bugreports.qt.nokia.com/secure/IssueNavigator.jspa?pager/start=50

关键词为:crash gdb python

另外,qtcreator似乎要求windows gdb打两个补丁,一个是gdb-increased-dcache-line-size.patch
一个是gdb-expand-line-sal-maybe.patch

还有一个实验性的性能补丁:gdb-without-dwarf-name-canonicalization.patch

这些qtcreator2.3.1是提供的
[/Quote]
当前master分支是需要python的。
只有QML的调试,才需要python,C/C++的基于CDB/GDB的调试不需要了。
老邓 2011-11-17
  • 打赏
  • 举报
回复
[Quote=引用 106 楼 ollydbg23 的回复:]

对了,老邓,不知道QTCreator里面,对于未初始化的函数局部变量,在调试的时候会是什么样子?这个问题困挠多年了,例如vector之类的话,如果在gdb+python的组合下,往往会导致gdb崩溃,不知道qtcreator是何种策略避免这些崩溃?
[/Quote]
未初始化的变量在调试的时候,没有任何崩溃现象。
现在CDB/GDB调试,都不需要Python。
而是使用QtCreator自己写的一个调试扩展插件。
因为调试功能对我来说够用了,所以我一直没看它是如何实现的。
不过目前有一个问题:添加一个成员变量到watch后,调试会变得非常缓慢。
不过我估计这个bug早应该报告过了。
xiatsinggood 2011-11-05
  • 打赏
  • 举报
回复
对,只要会C++就行了
banilaiai 2011-11-03
  • 打赏
  • 举报
回复
走在QT的路上
老邓 2011-11-02
  • 打赏
  • 举报
回复
[Quote=引用 89 楼 tigershi2000 的回复:]
QtCreator就是速度太慢,按理说,它的内容比VS要少的多,虽然无法和Delphi,BCB比速度,但比VC2005以上应该还是有优势的。但实际用起来,速度比vc2005慢的太多太多,尤其是启动速度。
[/Quote]
自己编译试试?
如果是比第一次启动速度的话,可能有点不公平。
毕竟,VS的东西,很多已经预加载了。
你关闭后再运动试试?
老邓 2011-11-02
  • 打赏
  • 举报
回复
100楼自己坐吧,舒服!
加载更多回复(81)

16,173

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧