﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-geforceX的编程小苑-随笔分类-Qt编程</title><link>http://www.cppblog.com/geforcex/category/364.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 24 May 2008 21:13:59 GMT</lastBuildDate><pubDate>Sat, 24 May 2008 21:13:59 GMT</pubDate><ttl>60</ttl><item><title>关于qt支持中文、国际化 </title><link>http://www.cppblog.com/geforcex/archive/2005/11/23/1262.html</link><dc:creator>geforceX</dc:creator><author>geforceX</author><pubDate>Wed, 23 Nov 2005 09:54:00 GMT</pubDate><guid>http://www.cppblog.com/geforcex/archive/2005/11/23/1262.html</guid><wfw:comment>http://www.cppblog.com/geforcex/comments/1262.html</wfw:comment><comments>http://www.cppblog.com/geforcex/archive/2005/11/23/1262.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/geforcex/comments/commentRss/1262.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/geforcex/services/trackbacks/1262.html</trackback:ping><description><![CDATA[qt对国际化有很好的支持。但默认的是unicode编码。中文系统下默认的并非unicode，<BR>而是比如gbk或gb2312。所以在进行const char*参数传递和显示时必须特别注意。<BR>比如在默认情况下<BR>QMessageBox::information(this, "Test", "这是一个测试");<BR>中文字符无法正确显式<BR>又如<BR>bool connect(const char * connectString);<BR>你如果输入<BR>QString str("一个测试");<BR>connect((const char*)str);<BR>默认是调用QString.latin1()方法，是直接从Unicode的QString返回latin-1字符表示<BR>集。在中文系统下有时不是你想要的。<BR>解决方案：在main.cpp里增加<BR>QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());<BR>这时涉及到QString/QCString到const char*的转换将使用本地的编码集。<BR>类似的还有setCodecForTr()方法。<BR><BR>NOTE: 这跟qt使用unicode进行内部通讯、显示并不冲突。当显示一个const char*时，<BR>qt会将const char*再行转成unicode。<BR><BR>
<HR>
另一种麻烦点的方法：<BR><BR><SPAN class=tpc_content>在写QT程序的时候，怎样使用中文？QT内建了国际化支持，可以使用国际化支持来实现。但，比较复烦琐，那怎么简单地使用中文呢？<BR>QT 的QString内部是使用Unicode编码的，在写源码的时候，可以使用本地的GB2312/GBK/GB18030，或者UTF8编码。如果是使用前者的话，那可以使用QString::fromLocal8Bit("本地中文字符串")来得到想要的结果。如果是使用后者的话，可以使用 QString::fromUtf8("UTF8编码格式的中文字符串")来得到想要的结果。<BR></SPAN><img src ="http://www.cppblog.com/geforcex/aggbug/1262.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/geforcex/" target="_blank">geforceX</a> 2005-11-23 17:54 <a href="http://www.cppblog.com/geforcex/archive/2005/11/23/1262.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>QT中的几个认识</title><link>http://www.cppblog.com/geforcex/archive/2005/11/21/1222.html</link><dc:creator>geforceX</dc:creator><author>geforceX</author><pubDate>Mon, 21 Nov 2005 07:44:00 GMT</pubDate><guid>http://www.cppblog.com/geforcex/archive/2005/11/21/1222.html</guid><wfw:comment>http://www.cppblog.com/geforcex/comments/1222.html</wfw:comment><comments>http://www.cppblog.com/geforcex/archive/2005/11/21/1222.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/geforcex/comments/commentRss/1222.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/geforcex/services/trackbacks/1222.html</trackback:ping><description><![CDATA[<P>1. QT和VC目前最大的不同就是消息的管理<BR>&nbsp;&nbsp;&nbsp; VC的不同对象之间发送消息是对象A发送一个消息给对象B就不管了，至于B对于此消息该什么响应函数来处理，由对象B自己定义的消息处理函数来响应；<BR>&nbsp;&nbsp;&nbsp; 而QT中，必须有一个平台来管理A－－&gt;B这个过程，它需要知道A发生了什么消息（signals），传给B后，还要通知B用什么消息处理函数（slots）来处理。</P>
<P>2. 在有自定义消息处理的类中，必须用这样的结构<BR>&nbsp;&nbsp;&nbsp; </P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">Q_OBJECT&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">这种signal-slot结构必须使用的宏</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #000000"><IMG src="http://www.cppblog.com/images/dot.gif"><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;slots:<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align=top><IMG src="http://www.cppblog.com/images/dot.gif"><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align=top>signals:<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align=top><IMG src="http://www.cppblog.com/images/dot.gif"><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align=top></SPAN></DIV>
<P>3. 当一个.h文件中申明一个类的变量，而这个类已经在其他文件中定义好了时，可以只把这个类的头文件只包含在该.h文件对应的.cpp文件中，而在该.h文件中只需要用一句class ClassName再申明一次就可以了，这样可以提高编译速度</P>
<P>4. 在头文件中可以用下列一组宏来防止该头文件被包含多次：(具体用法还要再查查)<BR>&nbsp;</P>
<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">#ifndef&nbsp;LCDRANGE_H<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">#define</SPAN><SPAN style="COLOR: #000000">&nbsp;LCDRANGE_H</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<IMG src="http://www.cppblog.com/images/dot.gif"><IMG src="http://www.cppblog.com/images/dot.gif">.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">头文件内容开始</SPAN><SPAN style="COLOR: #008000"><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">#endif</SPAN></DIV><img src ="http://www.cppblog.com/geforcex/aggbug/1222.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/geforcex/" target="_blank">geforceX</a> 2005-11-21 15:44 <a href="http://www.cppblog.com/geforcex/archive/2005/11/21/1222.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>第一个Qt程序</title><link>http://www.cppblog.com/geforcex/archive/2005/11/17/1171.html</link><dc:creator>geforceX</dc:creator><author>geforceX</author><pubDate>Thu, 17 Nov 2005 06:24:00 GMT</pubDate><guid>http://www.cppblog.com/geforcex/archive/2005/11/17/1171.html</guid><wfw:comment>http://www.cppblog.com/geforcex/comments/1171.html</wfw:comment><comments>http://www.cppblog.com/geforcex/archive/2005/11/17/1171.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/geforcex/comments/commentRss/1171.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/geforcex/services/trackbacks/1171.html</trackback:ping><description><![CDATA[<DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">#include&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">QApplication</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align=top>#include&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">QFont</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align=top>#include&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">QPushButton</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align=top>#include&nbsp;</SPAN><SPAN style="COLOR: #000000">&lt;</SPAN><SPAN style="COLOR: #000000">QWidget</SPAN><SPAN style="COLOR: #000000">&gt;</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">&nbsp;QMyWidget&nbsp;:&nbsp;</SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">&nbsp;QWidget<BR><IMG id=Codehighlighter1_117_163_Open_Image onclick="this.style.display='none'; Codehighlighter1_117_163_Open_Text.style.display='none'; Codehighlighter1_117_163_Closed_Image.style.display='inline'; Codehighlighter1_117_163_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_117_163_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_117_163_Closed_Text.style.display='none'; Codehighlighter1_117_163_Open_Image.style.display='inline'; Codehighlighter1_117_163_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_117_163_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cppblog.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_117_163_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000">:<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;QMyWidget(QWidget&nbsp;</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">parent&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;NULL);<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000">;<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align=top>QMyWidget::QMyWidget(QWidget&nbsp;</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">parent)&nbsp;<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;QWidget(parent)<BR><IMG id=Codehighlighter1_225_388_Open_Image onclick="this.style.display='none'; Codehighlighter1_225_388_Open_Text.style.display='none'; Codehighlighter1_225_388_Closed_Image.style.display='inline'; Codehighlighter1_225_388_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_225_388_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_225_388_Closed_Text.style.display='none'; Codehighlighter1_225_388_Open_Image.style.display='inline'; Codehighlighter1_225_388_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_225_388_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cppblog.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_225_388_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;setFixedSize(</SPAN><SPAN style="COLOR: #000000">200</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">200</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;QPushButton&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">quit&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000">&nbsp;QPushButton(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Quit</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #0000ff">this</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;quit</SPAN><SPAN style="COLOR: #000000">-&gt;</SPAN><SPAN style="COLOR: #000000">setGeometry(</SPAN><SPAN style="COLOR: #000000">10</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">40</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">180</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">40</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;quit</SPAN><SPAN style="COLOR: #000000">-&gt;</SPAN><SPAN style="COLOR: #000000">setFont(QFont(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">宋体</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">18</SPAN><SPAN style="COLOR: #000000">,&nbsp;QFont::Bold));<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align=top><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;main(</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;argc,&nbsp;</SPAN><SPAN style="COLOR: #0000ff">char</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">*</SPAN><SPAN style="COLOR: #000000">argv[])<BR><IMG id=Codehighlighter1_425_534_Open_Image onclick="this.style.display='none'; Codehighlighter1_425_534_Open_Text.style.display='none'; Codehighlighter1_425_534_Closed_Image.style.display='inline'; Codehighlighter1_425_534_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_425_534_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_425_534_Closed_Text.style.display='none'; Codehighlighter1_425_534_Open_Image.style.display='inline'; Codehighlighter1_425_534_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align=top></SPAN><SPAN id=Codehighlighter1_425_534_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.cppblog.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_425_534_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;QApplication&nbsp;app(argc,&nbsp;argv);<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QMyWidget&nbsp;myWidget;<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top><BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;myWidget.show();<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000">&nbsp;app.exec();<BR><IMG src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</SPAN></SPAN></DIV><BR>注意：<BR>1。定义一个类时用class关键字，定义完后不要忘记这时一个语句，需要用<STRONG>分号</STRONG>结束。<BR>2。Qt成员函数的变量命名规则是小写开头、大写间隔，与VC中的不一样。<BR>3。好久没有用C++发现好多语法都生疏了，唉，不行了，要赶紧捡起来， ^_^#!<img src ="http://www.cppblog.com/geforcex/aggbug/1171.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/geforcex/" target="_blank">geforceX</a> 2005-11-17 14:24 <a href="http://www.cppblog.com/geforcex/archive/2005/11/17/1171.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>