??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
某一ơ同学很无聊Q然后问我电脑上有无说。这是显然的Q我是网l小说迷嘛!从v点down下无数小说存在电脑上Q名字都懒得改,都是以数字打_然后以?txt”结,比如23432.txt之类的。当Ӟ文g查找q是得用EverythingQ要不然电脑上的上百万个文gQ手会抽{的?/p>
Q注Q我以ؓEverything是史上最快的文g查找工具Q强烈推荐!Q?/p>
先用"*.txt"试一下,:(Q给Z大堆文本文g呀。范围太qѝ还是得?strong>正则表达?/strong>来?/p>
^[0-9]*\.txt
YesQ给Z我电脑上存储的所有小说了?/p>
解释一下:
^[0-9]表示文g名以0-9之间的数字开_^是开头的意思($l尾Q?
*表示它前面的字符Q这里是数字Q要重复若干ơ(>=0Q?
\.匚w139869.txt中的那个数炏V因为正则表辑ּ中,?’被占用了,表示L字符Q所以要转义一?
txtQ这׃说了Q紧接着数点的是‘txt’三个字W?/p>
Everything只支持部分正则表辑ּ, | () ? * + . [] [^] ^ $ {m,n} 不过已经完全够用了?br>http://xbeta.info/everything/faq.htm#How_do_I_use_regex
考虑q样一个问题:目l在验收的时候,被指Z码的注释量不够,需要达到至?0%才行Q也是臛_需要添?500行注释。此时老师提出Q要所有的函数加上注释Q函数的名称、功能、参数、返回倹{这个时候,考虑能不能用正则表达式,提取源代码中的函C息,然后自动生成注释模板Q比?
int foo(int x, int y);
替换为:
/**
* @method foo
* @para x
* @para y
* @return
*/
int foo(int x, int y);
注意刎ͼq个函数参数的个数和cd可以是变动的Q返回值限定符的个数和cd也是变动的,比如staticcd函数Q有两个限定W,而构造函敎ͼ则没有限定符Q还有部分virtualcd函数?/p>
1. 本例中,定义?个不同的PageWidgetQ都是从QWidget中派生。用户在左侧list更换后,切换C同的配置c?/p>
2. QStackedWidget提供一lwidgetQ但一ơ只能有一个显C。将q个widgetd到layout中?/p>
3. 在layout讄中,一般ؓMainWindow讄一个layoutQ然后向q个layout中添加不同的widgetQlayout?/p>
4. 一个窗体是Window或者DialogQ向q个H体中添加其他的WidgetQ这些Widget可以使系l提供的Q也可以是用戯己定义的?/p>
5. 本例中用两ơQListWidget。一ơؓ图文Q一ơؓ文字。setViewMode()Q设|ListWidget为图标模式。通过setIcon()Q设|Item的图标。configButton->setIcon(QIcon(":/images/config.png"));
6. 定义QListWidgetItem的父cMؓQListWidgetQ设|QListWidget的项。或者用addWidget()之类的方法?/p>
7. 左侧select切换Ӟif(!current) current = previous;防止current?的意外情c?/p>
8. 自定义了一个slotQ用来处理contentList被选中切换时Q相应的处理Ҏ。也是讄stackedWidget的被选中V通过contentlist的row()定indexQ然后设|第indexؓ当前item?/p>
Ҏ一Q用tr()函数
QT中,用QString存储所有可见得文本/字符Ԍ使用tr()各U字W编码的文本转化为QStringQ然后既可以他们设|ؓ控g的显C文本?
在Widget的构造函C加入Q?
QTextCodec::setCodecForTr(QTextCodec::codecForName("gbk"));
QFont font1("Times", 12, QFont::Normal, FALSE);
this->setFont(font1);
q样在该H体的其他位|,可以使用tr()讄控g的内容,他们均可以显CZؓ中文了?
setWindowTitle(tr("消息嗅探?));
注意Q这U方式设|的中文昄对于整个控gQ以及它们的子控仉生效。如果在子控件中另外讄了setFont()Q那么全局的字体方案将会失效?
Ҏ二:使用translate()转换
先将需要显C的中文转化为gbk~码的unicodeQ然后将unicode转化为QByteArrayQ在只转化为char指针Qƈ传递给translate()函数?
注意Q这U方法显CZ文时Q会出现失效的情c譬如在菜单栏中可以昄中文Q但是在Label或者Button中却无法昄中文?
另外Q这U方法仅仅徏议只有少数按钮显CZ文时选用Q否则,代码写得也麻烦呀?
如果使用QDesigner生成的ui文gQ后创徏的界面类Q一般都有一个retranslateUIQ就是做q个用的?
const char * stringToUnicode(const char *str)
{
static QTextCodec *codec = QTextCodec::codecForName("gbk");
QByteArray qba = (codec->toUnicode(str)).toLocal8Bit();
const char * c_str = qba.data();
return c_str;
}
menuFile->setTitle(QApplication::translate("MainWindow", stringToUnicode("文g"), 0, QApplication::CodecForTr));
QTextCodeC用于在不同的~码Ҏ之间q行转换?
Ҏ三:使用Linguist
q是QT自带的用于Y件本地化的Y件的工具。没仔细研究q?
q种方式可以用于外文软g的本地化Q那么相比于前两者方式,处于更高的层ơ?
延生一Q编写多语言版本的QTE序
Q本部分内容参考QT手册Internationalization一节)
在方法一和方法二U,仍然是一个程序对应一个语a。如果希望QTE序针对不同的语aQ有不同的版本,该如何操作?
准备一?pro文gQ如Q?
HEADERS = funnydialog.h \
wackywidget.h
SOURCES = funnydialog.cpp \
main.cpp \
wackywidget.cpp
FORMS = fancybox.ui
TRANSLATIONS = superapp_dk.ts \
superapp_fi.ts \
superapp_no.ts \
superapp_se.ts
1. 使用lupdateQ从QTE序中抽取可转换的文本,生成一个ts文g?
2. 使用Linguist工具Q在原始文本间{换。ts文g以xml格式保存Q可以手动修攏V?
3. q行lreleaseQ生成轻量的qm格式的消息文件。这U文件可以在E序中用?
4. In your application, you must QTranslator::load() the translation files appropriate for the user's language, and install them using QCoreApplication::installTranslator().
因ؓEclipse的IDE支持多种语言Q如Java、Python、C++Q也支持不同的操作系l。这样不换C么环境,或者换一U语aQ熟悉的环境不会变化?/p>
2. 安装和设|Eclipse/CDT的环境?/p>
a. mingw的安装与配置?a title="http://www.shnenglu.com/romangol/archive/2008/04/19/47595.html" href="http://www.shnenglu.com/romangol/archive/2008/04/19/47595.html">http://www.shnenglu.com/romangol/archive/2008/04/19/47595.html。(PATHQC_INCLUDEPATHQCPLUS_INCLUDE_PATH, LIBRARY_PATHQ?/p>
b. Java虚拟机的安装与设|。(PATHQ?/p>
c. Eclipse/CDT的下载与安装?a title="http://www.ibm.com/developerworks/cn/linux/opensource/os-ecc/index.html" >http://www.ibm.com/developerworks/cn/linux/opensource/os-ecc/index.html
3. toolchain讄
新徏一个自带makefile的helloworldE序Qbuild可以通过。但点击q行Ӟ提示找不到可执行文g。原因在于,新徏目Ӟ没有选择合适的toolchain。如果是下蝲后解压后得到的CDTQ那么toolchain已经内置在其中了。但如果是update的方式获取,则需要手动下载?/p>
我安装的是mingw的编译环境,但选择cygwinQ却仍然可以生成可执行的E序。奇怪的事情。获取是因ؓQ设|configurationӞ通过查环境变量来获取实际调用的编译器Q?/p>
4. 何ؓtoolchainQ?/p>
A toolchain is a set of tools (such as a compiler, linker, and assembler) intended to build your project. Additional tools, such as a debugger, can be associated with a toolchain. There can be several toolchains available, depending on the compilers installed on your system.
5. 有哪些toolchain可供选择Q?/p>
CygwinQ通过支持GNU libcq行库,它完全实现gun toolchainQ用dll向上提供Windows的兼容层?/p>
mingw。windowsq_下gnu toolchain的入口,它直接用windows cq行库,不需要兼容层Q但可移植性要差一些?/p>
6. Eclipse如何使用q些toolchainQ?TODO
The CDT is designed to provide an extensible architecture, that will provide support for integration of tools provided by Independent Software Vendors?/p>
附:
Eclipse q_只是用于开发者工L一个框Ӟ它不直接支持 C/C++Q它使用外部插g来提供支持。CDT 是完全用 Java 实现的开放源码项目(Ҏ Common Public License 特许的)Q它作ؓ Eclipse SDK q_的一l插件。这些插件将 C/C++ 透视图添加到 Eclipse 工作収ͼWorkbenchQ中Q现在后者可以用许多视图和向g及高U编辑和调试支持来支?C/C++ 开发?/p>
下面?CDT 插gQ组件的完整列表Q?
1. 设计一个窗体,安排好它的函数和属性?/p>
2. 基本的layout包括四类QQHBoxLayoutQQVBoxLayoutQQGridLayoutQQFormLayout。前两个widget水^或竖直防止,gridwidget以格子的形式攄Qformlayoutwidget以row的Ş式放|?/p>
3. layout的用方法是Q先定一个layoutQ再向这个layout中添加widgetQ然后用父cM的setlayout()Q设|这个widget的layout?/p>
4. layout有一个setMenubarQ可以得Dialog也可以设|菜单栏?/p>
5. 在定义类Ӟ定义一个enumQ之后就可以直接使用q个enum中的元素?/p>
6. QT赋参数的Ҏ为tr("Button %1").arg(i + 1)?/p>
7. QGridLayout有setColumnStretch(int, int)ҎQ用于设|grid中格子的伔R因子Q也是能够占用多大的空间?/p>
8. QDialogButtonBox指用于确?退出的buttonl。它是这两类常用button的一个boxl合?/p>
9. 本例中涉及到的其它widget包括Q?/p>
a. QTextEditQ文本编辑框Q支持plain text和html text
b. QPushButtonQ按?/p>
c. QGroupBoxQ将widget以box的Ş式组l在一?/p>
d. QLineEditQ行~辑?/p>
e. QComboBoxQ下拉框
f. QSpinBoxQspin框,提供数值选择?/p>
先看cppblog的一个接口:
metaWeblog.getCategories()的参?/p>
q回l构?/p>
下面介绍使用Python来操作metablog接口。既然metablog是一个xml-rpc接口Q那么就使用Python的xmlrpc库吧Q好消息是这个库Python已经提供了,是xmlrpclib?/p>
代码如下:
import xmlrpclib
user = 'ronliu'
pass = '123'
url = 'http://www.shnenglu.com/ronliu/services/metaweblog.aspx'
server = xmlrpclib.Server(url)
cata = server.metaWeblog.getCategories('', user, pass) #典型的rpc调用
for e in cata:
print e['categoryid'], e['title']
操作l果Q?/p>
使用xmlrpclib的Server()ҎQ可以创Z个rpc服务器的代理Q然后通过q个代理讉Kq程的方法。可以用Python提供的调试功能查看rpc的执行过E:
import httplib
httplib.HTTPConnection.debuglevel = 1
下面的代码,会创徏一个简单的地图|页。如Q?/p>
<html xmlns=" >
<head runat="server">
<title>地图试</title>
<script language="javascript" src="</head>
<body>
<form id="form1" runat="server">
<div id="myMap" style="position:relative; width:400px; height:300px;"></div>
<script language="javascript">
var maps = new LTMaps( "myMap" ); //LTMapscL一个参敎ͼ是该地图所在div的name
maps.cityNameAndZoom( "beijing" , 5 );
var c = new LTSmallMapControl(); //单的攑֤~小?br> maps.addControl(c);
var point = new LTPoint( 11640969 , 3989945 );//北京
var marker = new LTMarker( point ); //一个标?br> maps.addOverLay( marker ); //标记覆盖到地图涂层?br> var text = new LTMapText( marker );
text.setLabel( "我的位置" );
maps.addOverLay( text );
</script>
</form>
</body>
</html>
详细的API说明?a title="http://api.51ditu.com/docs/index.html" >http://api.51ditu.com/docs/index.html可以查询?/p>
51API架构