<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>勿慢牛 &#187; Qt</title>
	<atom:link href="http://klniu.com/post/category/programme/qt/feed/" rel="self" type="application/rss+xml" />
	<link>http://klniu.com</link>
	<description>『勿慢牛个人博客』</description>
	<lastBuildDate>Fri, 06 Jan 2012 06:42:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Mac 与 IP 修改器</title>
		<link>http://klniu.com/post/mac-and-ip-trainer/</link>
		<comments>http://klniu.com/post/mac-and-ip-trainer/#comments</comments>
		<pubDate>Mon, 09 Aug 2010 09:55:02 +0000</pubDate>
		<dc:creator>勿慢牛</dc:creator>
				<category><![CDATA[Qt]]></category>
		<category><![CDATA[原创]]></category>
		<category><![CDATA[软件]]></category>
		<category><![CDATA[ip]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[macmanager]]></category>

		<guid isPermaLink="false">http://klniu.com/?p=561</guid>
		<description><![CDATA[因为经常要在不同的地点更换 mac 和 ip，所以就自己动手写了这个小工具。主要功能： 不重启计算机修改 mac。 修改网络地址参数，比如 ip、子网掩码、网关和 DNS。 也可以将上述参数通过 DHCP 来获取。 保存和读取配置，方便在不同地点调用不同的配置。 截图如下： 这个小工具是用 Qt 4.6.3 写成的，修改 mac 是通过更改注册表来完成的，之后调用 windows api 来实现网卡重启，这个是参考别人的代码。地址的修改是通过 netsh 命令完成的，工具开源，所以有兴趣的同学请给予指导，项目地址：http://code.google.com/p/klniu/ 因为库文件比较大，所以工具整体比较大，有两个版本，一个是动态链接版本，包含多个动态链接库。另一个是静态链接，是一个单文件，请大家自行选择使用。下载地址： 动态链接版本：http://klniu.googlecode.com/files/macmanager_1.0_dynamic.7z 静态链接版本：http://klniu.googlecode.com/files/macmanager_1.0_static.7z 源代码：http://klniu.googlecode.com/files/macmanager_1.0_src.7z]]></description>
			<content:encoded><![CDATA[<p>因为经常要在不同的地点更换 mac 和 ip，所以就自己动手写了这个小工具。主要功能：</p>
<ul>
<li>不重启计算机修改 mac。</li>
<li>修改网络地址参数，比如 ip、子网掩码、网关和 DNS。</li>
<li>也可以将上述参数通过 DHCP 来获取。</li>
<li>保存和读取配置，方便在不同地点调用不同的配置。</li>
</ul>
<p>截图如下：</p>
<p><img alt="macmanager" src="http://pic.klniu.com/klniu/201008/macmanager.png" style="width: 600px; height: 380px; " /></p>
<p>这个小工具是用 Qt 4.6.3 写成的，修改 mac 是通过更改注册表来完成的，之后调用 windows api 来实现网卡重启，这个是参考别人的代码。地址的修改是通过 netsh 命令完成的，工具开源，所以有兴趣的同学请给予指导，项目地址：<a href="http://code.google.com/p/klniu/" target="_blank">http://code.google.com/p/klniu/</a></p>
<p>因为库文件比较大，所以工具整体比较大，有两个版本，一个是动态链接版本，包含多个动态链接库。另一个是静态链接，是一个单文件，请大家自行选择使用。下载地址：</p>
<p>动态链接版本：<a href="http://klniu.googlecode.com/files/macmanager_1.0_dynamic.7z" target="_blank">http://klniu.googlecode.com/files/macmanager_1.0_dynamic.7z</a></p>
<p>静态链接版本：<a href="http://klniu.googlecode.com/files/macmanager_1.0_static.7z" target="_blank">http://klniu.googlecode.com/files/macmanager_1.0_static.7z</a></p>
<p>源代码：<a href="http://klniu.googlecode.com/files/macmanager_1.0_src.7z" target="_blank">http://klniu.googlecode.com/files/macmanager_1.0_src.7z</a></p>
]]></content:encoded>
			<wfw:commentRss>http://klniu.com/post/mac-and-ip-trainer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>QNetworkInterface 类</title>
		<link>http://klniu.com/post/qnetworkinterface-class/</link>
		<comments>http://klniu.com/post/qnetworkinterface-class/#comments</comments>
		<pubDate>Sun, 08 Aug 2010 06:02:01 +0000</pubDate>
		<dc:creator>勿慢牛</dc:creator>
				<category><![CDATA[Qt]]></category>
		<category><![CDATA[原创]]></category>
		<category><![CDATA[QNetworkInterface]]></category>

		<guid isPermaLink="false">http://klniu.com/?p=549</guid>
		<description><![CDATA[QNetworkInterface 是一个管理网络连接的类，利用他可以枚举本机的网络连接并获取其属性。比较常用的函数有： QList&#60;QNetworkAddressEntry&#62; QNetworkInterface::addressEntries() 获取地址列表，应用如下： //原型 QList&#60;QNetworkAddressEntry&#62; QNetworkInterface::addressEntries () const //比如获取本地所有 ip 和 netmask //allInterfaces() 是一个静态函数，用于获取本机所以连接。 QList&#60;QNetworkInterface&#62; networkInterface = QNetworkInterface::allInterfaces(); for (QList&#60;QNetworkInterface&#62;::const_iterator i = networkInterface.const_Begin(); i != networkInterface.const_End(); ++i) { //获取连接地址列表 QList&#60;QNetworkAddressEntry&#62; addressEntriesList = (*i).addressEntries(); for (QList&#60;QNetworkAddressEntry&#62;::const_iterator j = addressEntriesList.constBegin(); &#8230; <a href="http://klniu.com/post/qnetworkinterface-class/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>
	QNetworkInterface 是一个管理网络连接的类，利用他可以枚举本机的网络连接并获取其属性。比较常用的函数有：
</p>
<ul>
<li>
		QList&lt;QNetworkAddressEntry&gt; QNetworkInterface::addressEntries() <span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 19px; white-space: normal; font-size: 13px;"><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 19px; white-space: normal; font-size: 13px;">获取地址列表，应用如下：</span></span>
	</li>
</ul>
<pre class="brush: cpp">
//原型 QList&lt;QNetworkAddressEntry&gt; QNetworkInterface::addressEntries () const
//比如获取本地所有 ip 和 netmask
//allInterfaces() 是一个静态函数，用于获取本机所以连接。
QList&lt;QNetworkInterface&gt; networkInterface = QNetworkInterface::allInterfaces();
for (QList&lt;QNetworkInterface&gt;::const_iterator i = networkInterface.const_Begin(); i != networkInterface.const_End(); ++i) {
  //获取连接地址列表
  QList&lt;QNetworkAddressEntry&gt; addressEntriesList = (*i).addressEntries();
  for (QList&lt;QNetworkAddressEntry&gt;::const_iterator j = addressEntriesList.constBegin(); j != addressEntriesList.constEnd(); ++j) {
    //输出 ip
    qDebug() &lt;&lt; (*i).ip().toString();
    //输出 netmask
    qDebug() &lt;&lt; (*i).ip().toString();
  }
}
</pre>
<ul>
<li>
		QString QNetworkInterface::hardwareAddress() <span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 19px; white-space: normal; font-size: 13px;">获取网卡</span> mac <span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 19px; white-space: normal; font-size: 13px;">地址。例如，在上例中：</span>
	</li>
</ul>
<pre class="brush: cpp">
(*i).hardwareAddress();
</pre>
<ul>
<li>
		QString QNetworkInterface::name() 获取网卡名称。这个名称是系统分配的，是一个字符串，在 windows 平台，可以将此字符串作为参数传递给 api，用以获取或者设置其他 Qt 不能获取或设置的属性，比如网关、DNS、网卡类型、wins 服务器的获取与设置，可以参考 windows api 中的 getAdapterInfo 和 getPerAdaterInfo 来实现这些功能。
	</li>
<li>
		QNetworkInterface&nbsp;QNetworkInterface::interfaceFormName()，通过名称来获取一个QNetworkInterface的对象或指针，此处名称也是上述所指名称。
	</li>
<li>
		QString QNetworkInterface::humanReadableName()，获取网络连接名称，此处名称一般指&ldquo;本地连接&rdquo;、&ldquo;eth0&rdquo;及&ldquo;lo&rdquo;等。
	</li>
<li>
		int QNetworkInterface::index()，网卡索引，这是系统在启动时为网卡分配的索引，是一个整型值，当然也可以成为 Qt 与系统 api 之间的接口，就像上的是 name() 一样。
	</li>
<li>
		QNetworkInterface QNetworkInterface::interfaceFromIndex ( int index )，通过索引值来获取一个QNetworkInterface的对象或指针，此处索引值即为上述所指整型值。
	</li>
<li>
		QList&lt;QHostAddress&gt; QNetworkInterface::allAddresses ()，获取地址列表，此处只返回IP地址列表，所以如果只想获取IP地址的话，可以用此函数，例如：
	</li>
</ul>
<pre class="brush: cpp">
//allInterfaces() 是一个静态函数，用于获取本机所以连接。
QList&lt;QNetworkInterface&gt; networkInterface = QNetworkInterface::allInterfaces();
for (QList&lt;QNetworkInterface&gt;::const_iterator i = networkInterface.const_Begin(); i != networkInterface.const_End(); ++i) {
  //获取ip地址列表
  QList&lt;QHostAddress&gt; addressesList = (*i).allAddresses();
  for (QList&lt;QHostAddress&gt;::const_iterator j = addressesList.constBegin(); j != addressesList.constEnd(); ++j) {
    //输出 ip
    qDebug() &lt;&lt; (*i).toString();
  }
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://klniu.com/post/qnetworkinterface-class/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>QWizard下一步按钮的控制</title>
		<link>http://klniu.com/post/qwizard-next-button-control/</link>
		<comments>http://klniu.com/post/qwizard-next-button-control/#comments</comments>
		<pubDate>Mon, 14 Jun 2010 10:32:59 +0000</pubDate>
		<dc:creator>勿慢牛</dc:creator>
				<category><![CDATA[Qt]]></category>
		<category><![CDATA[原创]]></category>
		<category><![CDATA[QWizard]]></category>
		<category><![CDATA[QWizardPage]]></category>
		<category><![CDATA[按钮]]></category>

		<guid isPermaLink="false">http://klniu.com/?p=544</guid>
		<description><![CDATA[QWizard是Qt的向导类，在向导过程中，可以通过函数registerField注册字段实现全局访问，而且可以通过4种方法来控制下一步或者完成按钮的可用性： 第一种方法，isComplete函数，其应用于QWizardPage，可控制单个向导页面的&#8220;下一步&#8221;或者&#8220;完成&#8221;按钮的可用性，函数如下： bool QWizardPage::isComplete () const[virtual] 下面是isComplete的实现，源码来源于 http://doc.qt.nokia.com/qq/qq22-qwizard.html#validatebeforeitstoolate 首先重新实现QWizardPage::isComplete()函数 bool SailingPage::isComplete() const { return field(&#34;sailing&#34;).toDate().dayOfWeek() != Qt::Sunday; } 连接输入框或者其他需要监视的对象的信号与QWizardPage::completeChanged ()信号。 connect(sailing, SIGNAL(selectionChanged()), this, SIGNAL(completeChanged())); 当然也可以自己执行QWizardPage::completeChanged ()信号，即自行编写完成检查函数后执行信号： emit completeChanged() 第二种方法，hasAcceptableInput函数，用于QLineEdit，如果hasAcceptableInput为false，则按钮会变灰。 bool hasAcceptableInput () const 第三种方法，registerField函数，第一个参数name后加星号，例如field*，就可以保证如果此区域不填写，下一步按钮将始处于灰色状态。 void QWizardPage::registerField ( const QString &#38; &#8230; <a href="http://klniu.com/post/qwizard-next-button-control/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>
	QWizard是Qt的向导类，在向导过程中，可以通过函数registerField注册字段实现全局访问，而且可以通过4种方法来控制下一步或者完成按钮的可用性：</p>
<p>
	第一种方法，isComplete函数，其应用于QWizardPage，可控制单个向导页面的&ldquo;下一步&rdquo;或者&ldquo;完成&rdquo;按钮的可用性，函数如下：</p>
<pre class="brush:cpp;first-line:1;pad-line-numbers:true;highlight:null;">
bool QWizardPage::isComplete () const[virtual]</pre>
<p>
	下面是isComplete的实现，源码来源于</p>
<p>
	<a href="http://doc.qt.nokia.com/qq/qq22-qwizard.html#validatebeforeitstoolate" target="_blank">http://doc.qt.nokia.com/qq/qq22-qwizard.html#validatebeforeitstoolate</a></p>
<p>
	首先重新实现QWizardPage::isComplete()函数</p>
<pre class="brush:cpp">
bool SailingPage::isComplete() const
{
    return field(&quot;sailing&quot;).toDate().dayOfWeek() != Qt::Sunday;
}</pre>
<p>
	连接输入框或者其他需要监视的对象的信号与QWizardPage::completeChanged ()信号。</p>
<pre class="brush:cpp">
connect(sailing, SIGNAL(selectionChanged()), this, SIGNAL(completeChanged()));</pre>
<p>
	当然也可以自己执行QWizardPage::completeChanged ()信号，即自行编写完成检查函数后执行信号：</p>
<pre class="brush:cpp">
emit completeChanged()</pre>
<p>
	第二种方法，hasAcceptableInput函数，用于QLineEdit，如果hasAcceptableInput为false，则按钮会变灰。</p>
<pre class="brush:cpp">
bool hasAcceptableInput () const</pre>
<p>
	第三种方法，registerField函数，第一个参数name后加星号，例如field*，就可以保证如果此区域不填写，下一步按钮将始处于灰色状态。</p>
<pre class="brush:cpp">
void QWizardPage::registerField ( const QString &amp; name, QWidget * widget, const char * property = 0, const char * changedSignal = 0)</pre>
<p>
	第四种方法，重新实现bool QWizardPage::validatePage ()函数，其能在点击下一步或者完成按钮时完成函数所定义的功能，当然就包括验证这一类的东西了。</p>
<p><!--[syntaxhighlighter]--><br />
							  <!--代码高亮，请勿编辑--><br />
							  <script type="text/javascript" src="http://klniu.com/wordpress/wp-content/plugins/ck-and-syntaxhighlighter/syntaxhighlighter/scripts/shCore.js"></script><br />
							  <script type="text/javascript" src="http://klniu.com/wordpress/wp-content/plugins/ck-and-syntaxhighlighter/syntaxhighlighter/scripts/shBrushCpp.js"></script></p>
<link type="text/css" rel="stylesheet" href="http://klniu.com/wordpress/wp-content/plugins/ck-and-syntaxhighlighter/syntaxhighlighter/styles/shCoreCk.css" />
<link type="text/css" rel="stylesheet" href="http://klniu.com/wordpress/wp-content/plugins/ck-and-syntaxhighlighter/syntaxhighlighter/styles/shThemeCk.css" />
							  <script type="text/javascript">
							  //<![CDATA[
							  SyntaxHighlighter.defaults['class-name']	= '';
							  SyntaxHighlighter.defaults['smart-tabs']	= true;
							  SyntaxHighlighter.defaults['tab-size']	= 4;
							  SyntaxHighlighter.defaults['gutter']		= true;
							  SyntaxHighlighter.defaults['quick-code']	= true;
							  SyntaxHighlighter.defaults['collapse'] 	= true;
							  SyntaxHighlighter.defaults['auto-links']	= false;
							  SyntaxHighlighter.all();
							  //]]&gt;
							  </script><br />
							  <!--[/syntaxhighlighter]--><!--[syntaxhighlighter]--><br />
							  <!--代码高亮，请勿编辑--><br />
							  <script type="text/javascript" src="http://klniu.com/wordpress/wp-content/plugins/ck-and-syntaxhighlighter/syntaxhighlighter/scripts/shCore.js"></script><br />
							  <script type="text/javascript" src="http://klniu.com/wordpress/wp-content/plugins/ck-and-syntaxhighlighter/syntaxhighlighter/scripts/shBrushCpp.js"></script></p>
<link type="text/css" rel="stylesheet" href="http://klniu.com/wordpress/wp-content/plugins/ck-and-syntaxhighlighter/syntaxhighlighter/styles/shCoreCk.css" />
<link type="text/css" rel="stylesheet" href="http://klniu.com/wordpress/wp-content/plugins/ck-and-syntaxhighlighter/syntaxhighlighter/styles/shThemeCk.css" />
							  <script type="text/javascript">
							  //<![CDATA[
							  SyntaxHighlighter.defaults['class-name']	= '';
							  SyntaxHighlighter.defaults['smart-tabs']	= true;
							  SyntaxHighlighter.defaults['tab-size']	= 4;
							  SyntaxHighlighter.defaults['gutter']		= true;
							  SyntaxHighlighter.defaults['quick-code']	= true;
							  SyntaxHighlighter.defaults['collapse'] 	= true;
							  SyntaxHighlighter.defaults['auto-links']	= false;
							  SyntaxHighlighter.all();
							  //]]&gt;
							  </script><br />
							  <!--[/syntaxhighlighter]--></p>
]]></content:encoded>
			<wfw:commentRss>http://klniu.com/post/qwizard-next-button-control/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>QString, wchar_t *, TCHAR, CString和其他字符或字符串类型的转换</title>
		<link>http://klniu.com/post/qstring-wchar_t-tchar-and-other-types-of-conversion-characters-or-strings/</link>
		<comments>http://klniu.com/post/qstring-wchar_t-tchar-and-other-types-of-conversion-characters-or-strings/#comments</comments>
		<pubDate>Sat, 08 May 2010 11:15:30 +0000</pubDate>
		<dc:creator>勿慢牛</dc:creator>
				<category><![CDATA[Qt]]></category>
		<category><![CDATA[转载]]></category>
		<category><![CDATA[QString]]></category>
		<category><![CDATA[TCHAR]]></category>
		<category><![CDATA[wchar_t]]></category>
		<category><![CDATA[转换]]></category>

		<guid isPermaLink="false">http://klniu.com/?p=533</guid>
		<description><![CDATA[这篇文章是在Blogspot上看到的一篇文章，能够解决QString, wchar_t *, TCHAR和其他字符或字符串类型之间的转换，方便在使用Windows API的时候转换的麻烦。 原文地址：http://tkrotoff.blogspot.com/2010/04/code-snippets-about-qstring-wchart.html //QString to wchar_t *: const wchar_t * encodedName = reinterpret_cast&#60;const wchar_t *&#62;(fileName.utf16()); //QString to char * given a file name: QByteArray fileName = QFile::encodeName(aFileName); const char * encodedName = fileName.constData(); //Valid as long as &#8230; <a href="http://klniu.com/post/qstring-wchar_t-tchar-and-other-types-of-conversion-characters-or-strings/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>这篇文章是在Blogspot上看到的一篇文章，能够解决QString, wchar_t *, TCHAR和其他字符或字符串类型之间的转换，方便在使用Windows API的时候转换的麻烦。</p>
<p>原文地址：<a href="http://tkrotoff.blogspot.com/2010/04/code-snippets-about-qstring-wchart.html">http://tkrotoff.blogspot.com/2010/04/code-snippets-about-qstring-wchart.html</a></p>
<pre class="brush:cpp;">//QString to wchar_t *:
const wchar_t * encodedName = reinterpret_cast&lt;const wchar_t *&gt;(fileName.utf16());

//QString to char * given a file name:
QByteArray fileName = QFile::encodeName(aFileName);
const char * encodedName = fileName.constData(); //Valid as long as fileName exists

//QString to char * (general case):
const char * tmp = str.toUtf8().constData();
[/code]
Windows 数据类型: http://msdn.microsoft.com/en-us/library/aa383751.aspx
[code lang=&quot;cpp&quot;]
//TCHAR:
#ifdef UNICODE
typedef wchar_t TCHAR;
#else
typedef char TCHAR;
#endif

//LPCTSTR:
#ifdef UNICODE
typedef LPCWSTR LPCTSTR;
#else
typedef LPCSTR LPCTSTR;
#endif

//LPCSTR:
typedef const char * LPCSTR;

//LPCWSTR:
typedef const wchar_t * LPCWSTR;

//LPCWSTR to QString:
QString text(QString::fromUtf16(reinterpret_cast&lt;const unsigned short *&gt;(tmp)));</pre>
<p>另一种解决办法是使用QString::fromWCharArray()，但这个函数可能导致一些尚未解决的wchar_t符号问题。</p>
<p>最佳的编程风格： 使用L来定义wchar_t宽字符串，比如 L&quot;text&quot; 字义了一个UNICODE字符串&quot;text&quot;。</p>
<p>今天又看到一个文章，关于字符串之间的转换，比较全面，在此将英文翻译并整理一下。<br />
	原文地址：http://hi.baidu.com/koko200147/blog/item/7e3cad828c9b9bb66d8119cb.html</p>
<p>QString与其他字符类型之间的转换，QString在Qt4中是UNICODE编码的，使用utf16规范。</p>
<pre class="brush:cpp;">QString::fromAscii ( const char * str, int size = -1 );
QString::fromLatin1 ( const char * str, int size = -1 );
QString::fromLocal8Bit ( const char * str, int size = -1 );
QString::fromRawData ( const QChar * unicode, int size );
QString::fromStdString ( const std::string &amp; str );
QString::fromStdWString ( const std::wstring &amp; str );
QString::fromUcs4 ( const uint * unicode, int size = -1 );
QString::fromUtf8 ( const char * str, int size = -1 );
QString::fromUtf16 ( const ushort * unicode, int size = -1 );
QString::fromWCharArray ( const wchar_t * string, int size = -1 );

//qstring -&gt;std::string
QString::toStdString () ;
QString::toStdWString ();

//BSTR&lt;-&gt;QString，不太了解BSTR是什么，还没用到过，所以不知道对不对
BSTR bstr_str;
QString q_str((QChar*)bstr_str, wcslen(bstr_str));
bstr_str = SysAllocString(q_str.utf16());//remember use SysFreeString on BSTR

//QString&lt;-&gt;LPCSTR
QString::toLocal8Bit().constData();
QString::fromLocal8Bit ( const char * str, int size = -1 );

//QString&lt;-&gt;LPCWSTR
QString::utf16();
QString::fromUtf16 ( const ushort * unicode, int size = -1 );

//QString&lt;-&gt;CString
CString c_str(qstring::utf16());
QString fromUtf16 (LPCTSTR(c_str) );</pre>
<p>CString转换为char*</p>
<pre class="brush:cpp;">//1.传给未分配内存的const char* （LPCTSTR）指针.
CString cstr(asdd);
const char* ch = (LPCTSTR)cstr;//ch指向的地址和cstr相同。但由于使用const保证ch不会修改，所以安全.

//2.传给未分配内存的指针.
CString cstr = &quot;ASDDSD&quot;;
char *ch = cstr.GetBuffer(cstr1.GetLength() + 1);
cstr.ReleaseBuffer();
//修改ch指向的值等于修改cstr里面的值.
//PS:用完ch后,不用delete ch,因为这样会破坏cstr内部空间,容易造成程序崩溃.

//3.第二种用法。把CString 值赋给已分配内存的char *。
CString cstr1 = &quot;ASDDSD&quot;;
int strLength = cstr1.GetLength() + 1;
char *pValue = new char[strLength];
strncpy(pValue, cstr1, strLength);

//4.第三种用法.把CString 值赋给已分配内存char[]数组.
CString cstr2 = &quot;ASDDSD&quot;;
int strLength1 = cstr1.GetLength() + 1;
char chArray[100];
memset(chArray,0, sizeof(bool) * 100); //将数组的垃圾内容清空.
strncpy(chArray, cstr1, strLength1);

//5.如果上述都不行，使用以下方法
CString origCString(&quot;Hello, World!&quot;);
wchar_t* wCharString = origCString.GetBuffer(origCString.GetLength()+1);
size_t origsize = wcslen(wCharString) + 1;
size_t convertedChars = 0;
char *CharString;
CharString=new char(origsize);
wcstombs_s(&amp;convertedChars, CharString, origsize, wCharString , _TRUNCATE);
cout &lt;&lt; CharString &lt;&lt; endl; //成功输出字符串&quot;Hello,World&quot;</pre>
<p>从UTF8编码到GB编码的字符串转换方法：</p>
<pre class="brush:cpp;">QString Utf8_To_GB(QString strText)
{
return QString::fromUtf8(strText.toLocal8Bit().data());
}</pre>
<p>从GB编码到UTF8编码的字符串转换方法：</p>
<pre class="brush:cpp;">QString GB_To_Utf8(char *strText)
{
return QString::fromLocal8Bit(strText);
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://klniu.com/post/qstring-wchar_t-tchar-and-other-types-of-conversion-characters-or-strings/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Qt中addStretch的有趣应用</title>
		<link>http://klniu.com/post/qt-interesting-applications-in-addstretch/</link>
		<comments>http://klniu.com/post/qt-interesting-applications-in-addstretch/#comments</comments>
		<pubDate>Sat, 08 May 2010 08:11:47 +0000</pubDate>
		<dc:creator>勿慢牛</dc:creator>
				<category><![CDATA[Qt]]></category>
		<category><![CDATA[原创]]></category>
		<category><![CDATA[addstretch]]></category>

		<guid isPermaLink="false">http://klniu.com/?p=532</guid>
		<description><![CDATA[今天在使用addStretch，布局的时候，发现addStretch竟然是可以平均分配的，有意思。比如： QVBoxLayout *buttonLayout = new QVBoxLayout; buttonLayout-&#62;addStretch(1); buttonLayout-&#62;addWidget(Button1); buttonLayout-&#62;addStretch(1); buttonLayout-&#62;addWidget(Button2); buttonLayout-&#62;addStretch(1); buttonLayout-&#62;addWidget(Button3); buttonLayout-&#62;addStretch(6); 您会发现，buttonLayout的布局将空白没有widget的地方分成了9份，然后按照您所规定的地方分配弹簧，于是布局起来就方便多了，以前没有发现这个，一直还为布局头疼呢，现在有点门路了。]]></description>
			<content:encoded><![CDATA[<p>今天在使用addStretch，布局的时候，发现addStretch竟然是可以平均分配的，有意思。比如：</p>
<pre class="brush:cpp;">QVBoxLayout *buttonLayout = new QVBoxLayout;
buttonLayout-&gt;addStretch(1);
buttonLayout-&gt;addWidget(Button1);
buttonLayout-&gt;addStretch(1);
buttonLayout-&gt;addWidget(Button2);
buttonLayout-&gt;addStretch(1);
buttonLayout-&gt;addWidget(Button3);
buttonLayout-&gt;addStretch(6);</pre>
<p>您会发现，buttonLayout的布局将空白没有widget的地方分成了9份，然后按照您所规定的地方分配弹簧，于是布局起来就方便多了，以前没有发现这个，一直还为布局头疼呢，现在有点门路了。</p>
]]></content:encoded>
			<wfw:commentRss>http://klniu.com/post/qt-interesting-applications-in-addstretch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>QTableWidgetItem中checkBox的判断问题</title>
		<link>http://klniu.com/post/qtablewidgetitem-in-the-judgment-checkbox/</link>
		<comments>http://klniu.com/post/qtablewidgetitem-in-the-judgment-checkbox/#comments</comments>
		<pubDate>Sat, 08 May 2010 06:28:37 +0000</pubDate>
		<dc:creator>勿慢牛</dc:creator>
				<category><![CDATA[Qt]]></category>
		<category><![CDATA[原创]]></category>
		<category><![CDATA[checkBox]]></category>
		<category><![CDATA[QTableWidget]]></category>

		<guid isPermaLink="false">http://klniu.com/?p=530</guid>
		<description><![CDATA[在QTableWidget中会经常用的checkBox，但是如何判断复选框是否被选中呢，方法是利用QTableWidget::cellChanged()函数，检查单元格内容的变化，然后连接此信号，在槽函数中检测checkBox的状态，代码如下: QTableWidget *tableWidget = new QTableWidget; QTableWidgetItem *firstColumn = new QTableWidgetItem(tr(&#34;test&#34;)); firstColumn-&#62;setCheckState(Qt::Checked);//加入复选框 connect(tableWidget, SIGNAL(cellChanged(int,int)), this, SLOT(changeTest(int, int))); void changeTest(int row, int col) { if(tableWidget -&#62;item(row, col)-&#62;checkState() == Qt::Checked) ... else ... } 如果需要的话，可以通过判断信号发出者防止死循环。]]></description>
			<content:encoded><![CDATA[<p>在QTableWidget中会经常用的checkBox，但是如何判断复选框是否被选中呢，方法是利用QTableWidget::cellChanged()函数，检查单元格内容的变化，然后连接此信号，在槽函数中检测checkBox的状态，代码如下:</p>
<pre class="brush:cpp;">QTableWidget *tableWidget = new QTableWidget;
QTableWidgetItem *firstColumn = new QTableWidgetItem(tr(&quot;test&quot;));
firstColumn-&gt;setCheckState(Qt::Checked);//加入复选框
connect(tableWidget, SIGNAL(cellChanged(int,int)), this, SLOT(changeTest(int, int)));
void changeTest(int row, int col)
{
      if(tableWidget -&gt;item(row, col)-&gt;checkState() == Qt::Checked)
          ...
      else
          ...
}</pre>
<p>如果需要的话，可以通过判断信号发出者防止死循环。</p>
]]></content:encoded>
			<wfw:commentRss>http://klniu.com/post/qtablewidgetitem-in-the-judgment-checkbox/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>QTableWidget排序问题</title>
		<link>http://klniu.com/post/qtablewidget-scheduling/</link>
		<comments>http://klniu.com/post/qtablewidget-scheduling/#comments</comments>
		<pubDate>Tue, 04 May 2010 09:46:32 +0000</pubDate>
		<dc:creator>勿慢牛</dc:creator>
				<category><![CDATA[Qt]]></category>
		<category><![CDATA[原创]]></category>
		<category><![CDATA[QTableWidget]]></category>

		<guid isPermaLink="false">http://klniu.com/post/qtablewidget-scheduling/</guid>
		<description><![CDATA[QTableWidget在启用排序的时候会自动调用sortByColumn() 函数进行排序，因此无须再次调用。启用排序函数为setSortingEnabled(bool enable)，默认为false，启用代码如下: tableWidget-&#62;setSortingEnabled(true);]]></description>
			<content:encoded><![CDATA[<p>QTableWidget在启用排序的时候会自动调用sortByColumn() 函数进行排序，因此无须再次调用。启用排序函数为setSortingEnabled(bool enable)，默认为false，启用代码如下:</p>
<pre class="brush:cpp;">tableWidget-&gt;setSortingEnabled(true);</pre>
]]></content:encoded>
			<wfw:commentRss>http://klniu.com/post/qtablewidget-scheduling/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

