﻿<?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; 技术</title>
	<atom:link href="http://lizehong.freevar.com/?cat=6&#038;feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://lizehong.freevar.com</link>
	<description>技术爆炸、文明生存与个体价值</description>
	<lastBuildDate>Sat, 08 Dec 2012 14:07:20 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4</generator>
		<item>
		<title>Qt中的消息通知和事件发送</title>
		<link>http://lizehong.freevar.com/?p=310</link>
		<comments>http://lizehong.freevar.com/?p=310#comments</comments>
		<pubDate>Sun, 22 Jul 2012 13:00:46 +0000</pubDate>
		<dc:creator>Lee</dc:creator>
				<category><![CDATA[Qt应用]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[QTE]]></category>

		<guid isPermaLink="false">http://lizehong.freevar.com/?p=310</guid>
		<description><![CDATA[Qt中的信号和槽机制、事件机制是其具有特色的两大机制。利用这两种机制可以轻松地实现需要的消息通知和事件通知。 1、信号和槽机制 充分使用Qt库中已经定义和实现好的对象的信号和槽函数，如按钮的clicked()/pressed()信号等，它们能满足很多的需求； 自定义缺乏的信号和槽 … <a href="http://lizehong.freevar.com/?p=310"> Continue reading <span class="meta-nav">&#8594; </span></a>]]></description>
			<content:encoded><![CDATA[<p>Qt中的信号和槽机制、事件机制是其具有特色的两大机制。利用这两种机制可以轻松地实现需要的消息通知和事件通知。</p>
<p>1、信号和槽机制</p>
<ul>
<li>充分使用Qt库中已经定义和实现好的对象的信号和槽函数，如按钮的clicked()/pressed()信号等，它们能满足很多的需求；</li>
<li>自定义缺乏的信号和槽函数，借助Qt的元对象系统和内省机制，在创建类时添加Q_OBJECT宏，使用signals:/slots:标记添加自定义的信号/槽函数，使用时通过emit发送信号，用connect()函数连接信号和槽。</li>
</ul>
<p>2、事件机制</p>
<ul>
<li>充分使用Qt库中已经定义好的标准事件对象，如鼠标事件QMouseEvent、键盘事件QKeyPressEvent等，自定义实现事件的处理函数，如keyPressEvent（QEvent*）；</li>
<li>自定义需要的事件类型和实现QObject::customEvent(QEvent*)函数，使用Qt的postEvent和sendEvent函数发送事件通知。</li>
</ul>
<p>(1)、自定义事件：</p>
<ul>
<li>方式一；通过QEvent::Type指定事件类型的值，然后new一个该类型的自定义事件，如：</li>
</ul>
<pre class="brush: cpp; gutter: true">const QEvent::Type MyEvent = (QEvent::Type)9393;
QApplication::postEvent(object, new QCustomEvent(MyEvent));</pre>
<p>QCustomEvent类是Qt3中的类，现在已经不推荐使用了。<br />
QEvent::Type是Qt中的枚举类型，Qt定义了一大堆的库事件类型常数值，当然也允许用户自定义自己的事件类型值，但是自定义的值应大于1000(QEvent::User)，且小于65535(QEvent::MaxUser).方便起见，可以使用int QEvent::registerEventType ( int hint = -1 ) [static]函数注册和保留一个自定义的事件类型值，这样可以避免不小心重复使用了同一个事件类型值，它保证每次得到一个未被使用的事件类型常数值，该函数是线程安全的，在Qt4.4中引入。</p>
<ul>
<li>方式二：通过继承QEvent创建新的事件类，如：
<pre class="brush: cpp; gutter: true">class CMyCustomEvent：public QEvent
{
	public:
		CMyCustomEvent(int data):m_iData(data),QEvent((QEvent::Type)9393){}
	private:
		int m_iData;
		...
};</pre>
</li>
</ul>
<p>(2)、发送事件：postEvent/sendEvent/notify</p>
<ul>
<li>postEvent函数：
<pre class="brush: cpp; gutter: true">void QCoreApplication::postEvent ( QObject * receiver, QEvent * event ) [static]//异步</pre>
</li>
</ul>
<p>将事件放入事件消息队列中，然后立即返回，函数只将事件放入队列的尾端，不保证事件立即得到处理。事件必须是分配在堆上的，即new出来的，因为在事件被发送出去后，事件队列就拥有了事件的，事件处理完后Qt会自动delete该事件，因此在把事件posted出去后再尝试使用它是不安全的。<br />
当程序控制到达主事件循环时，事件队列中的所有事件才用notify函数发送。事件的处理是按照其发送到队列中的顺序进行的，如果想要控制事件的优先级，可以考虑它的带优先级参数的重载函数。</p>
<pre class="brush: cpp; gutter: true">void QCoreApplication::postEvent ( QObject * receiver, QEvent * event, int priority ) [static]//Qt4.3引入</pre>
<p>这两个函数都是线程安全的。</p>
<ul>
<li>sendEvent函数：
<pre class="brush: cpp; gutter: true">bool QCoreApplication::sendEvent ( QObject * receiver, QEvent * event ) [static]//同步</pre>
</li>
</ul>
<p>用notify函数将事件直接派发给接收者和进行处理，返回事件处理者的返回值。事件会立即送至接受者，被发送后，Qt不会自动delete该事件，因此合适的做法是在栈上创建事件。</p>
<ul>
<li>sendPostedEvents：</li>
</ul>
<pre class="brush: cpp; gutter: true">void QCoreApplication::sendPostedEvents ( QObject * receiver, int event_type ) [static]</pre>
<p>将事件队列中用postEvent函数放入的对应接受者和事件类型的事件立即分发，但是来自窗口系统的事件不被分发，它们被processEvents()函数分发。<br />
如果接受者是null，则对应所有的接受者；如果event_type为0，则对应receiver的所有的事件。该函数必须和receiver在同一个线程内被调用。<br />
void QCoreApplication::sendPostedEvents () [static]<br />
分发事件队列中的所有事件，即清空事件队列。</p>
<ul>
<li>notify：
<pre class="brush: cpp; gutter: false">bool QCoreApplication::notify ( QObject * receiver, QEvent * event ) [virtual]</pre>
</li>
</ul>
<p>这是事件机制中最基本的函数，所有的事件发送最终都要调用这个函数。它把事件信号发送给接受者，并返回receiver-&gt;event(event)处理的返回值。</p>
<p>(3)、处理事件：void QObject::customEvent ( QEvent * event ) [virtual protected]<br />
通过重载实现customEvent函数，可以对自定义的事件进行灵活的处理，如：</p>
<pre class="brush: cpp; gutter: true">void MyWidget::customEvent(QEvent *event)
{
	if (event-&gt;type() == MyCustomEvent)
	{
	   QMessageBox msgBox;
	   msgBox.setText(&quot;The is mycustomevent example.&quot;);
	   msgBox.exec();
	}
	else if(...)
	{
		...
	}
	...
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://lizehong.freevar.com/?feed=rss2&#038;p=310</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>工作笔记（04/2012）</title>
		<link>http://lizehong.freevar.com/?p=304</link>
		<comments>http://lizehong.freevar.com/?p=304#comments</comments>
		<pubDate>Thu, 19 Jul 2012 14:05:13 +0000</pubDate>
		<dc:creator>Lee</dc:creator>
				<category><![CDATA[Qt应用]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[QTE]]></category>
		<category><![CDATA[工作]]></category>
		<category><![CDATA[笔记]]></category>

		<guid isPermaLink="false">http://lizehong.freevar.com/?p=304</guid>
		<description><![CDATA[1、通过使用widget的setfont函数可以设置界面所有文字的字体。 2、使用widget的setFocusPolicy函数来控制其焦点的获取，或者是禁止其使用Qt默认的焦点转移行为。 void setFocusPolicy(Qt::NoFocus); //禁止焦点的获取,也 … <a href="http://lizehong.freevar.com/?p=304"> Continue reading <span class="meta-nav">&#8594; </span></a>]]></description>
			<content:encoded><![CDATA[<p>1、通过使用widget的setfont函数可以设置界面所有文字的字体。</p>
<p>2、使用widget的setFocusPolicy函数来控制其焦点的获取，或者是禁止其使用Qt默认的焦点转移行为。</p>
<pre class="brush: cpp; gutter: false">void setFocusPolicy(Qt::NoFocus); //禁止焦点的获取,也将禁止默认的焦点行为
void setFocus(); //获取焦点，接收键盘事件等</pre>
<ul>
<li>拥有焦点（Focus）的widget才能接受键盘事件</li>
</ul>
<p>3、Qt应用中new出来的控件，一般Qt会在应用的主窗体关闭时（准确说应该是应用退出时）自动负责delete掉；<br />
也可以自己手动delete掉，或者通过设置相应的属性如：setAttribute(Qt::WA_DeleteOnClose);来实现。<br />
但是有一些注意事项：</p>
<ul>
<li>注意是否会对控件进行多次的delete操作；</li>
<li>手动delete时，必须先delete掉子对象，再delete父对象，否则会出现对子对象delete两次的操作错误；</li>
<li>通过new []的方法创建的控件组，必须手动使用delete []的方式进行释放，否则Qt自动delete时会出错。</li>
</ul>
<p>4、使用C库中的fread、fwrite函数进行文件的读写时，如果要使用fseek函数进行文件指针的移动，最好使用SEEK_SET作为参考位置</p>
<ul>
<li>对文件进行修改写操作时，文件偏移以SEEK_SET作为参考位置，尤其是会对一个文件在多个位置进行写操作时。</li>
<li>把文件的内容全部读出进行需要的修改，然后再把修改好的内容重新写回到文件中，以避免位置移动的偏差。</li>
</ul>
<p>5、去除QTE应用程序在开发板上显示时的鼠标指针：编译QTE的库时，加上选项 -no-feature-CURSOR -no-feature-QWS_CURSOR<br />
或者修改qconfig-xxx.h配置文件，增加宏</p>
<pre class="brush: cpp; gutter: false">#define QT_NO_CURSOR;
#define QT_NO_QWS_CURSOR;</pre>
<p>6、QTE应用中文显示问题的定位：</p>
<ul>
<li>中文不显示，但英文正常显示&#8212;&#8211;没有中文字体，下载字体，并设置正确的字体环境变量</li>
<li>中文乱码&#8212;-有中文字体，但是中文的编码不对</li>
</ul>
<p>7、在linux中使用configure安装应用程序时，如果需要多次或重新安装同一应用程序，在每次安装完后，使用make confclean后再执行configure配置。否则会对前一次的安装目录进行覆盖安装，而不是在configure中新的-prefix选项指定目录中安装</p>
<p>8、QTE库编译安装的选项配置，参考其自身的qconfig-minimal.h等五个配置文件以及qfeatures.txt特性文件编写项目的配置文件【推荐】，也可以直接在configure中通过 -no-feature-&lt;feature&gt; -feature-&lt;feature&gt; 选项进行特性的定制</p>
<p>9、可以通过编译QTE目录tools/下的相关工程来使用对应的工具：如qvfb/makeqpf工具等。</p>
<p>10、QTE configure中使用-fast -optimized-qmake选项之一时会导致-embedded x86的make失败，原因不确定。</p>
<p>11、linux下使用free/top命令监控系统的内存使用、性能状态</p>
<ul>
<li>VIRT=SWAP+RES 应用占有的地址空间，要求的虚拟内存</li>
<li>RES=CODE+DATA 应用程序真正使用的内存，常驻内存</li>
<li>SHR 共享内存大小</li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://lizehong.freevar.com/?feed=rss2&#038;p=304</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>工作笔记（03/2012）</title>
		<link>http://lizehong.freevar.com/?p=301</link>
		<comments>http://lizehong.freevar.com/?p=301#comments</comments>
		<pubDate>Thu, 19 Jul 2012 13:53:20 +0000</pubDate>
		<dc:creator>Lee</dc:creator>
				<category><![CDATA[Qt应用]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[QTE]]></category>
		<category><![CDATA[工作]]></category>
		<category><![CDATA[笔记]]></category>

		<guid isPermaLink="false">http://lizehong.freevar.com/?p=301</guid>
		<description><![CDATA[1、QTableView QTableWidget中翻页功能的实现 通过QTableView中的滑动条位置的获取与设置来实现： //通过其继承的函数获取当前滑动条 QScrollBar * QAbstractScrollArea::verticalScrollBar () con … <a href="http://lizehong.freevar.com/?p=301"> Continue reading <span class="meta-nav">&#8594; </span></a>]]></description>
			<content:encoded><![CDATA[<p>1、QTableView QTableWidget中翻页功能的实现<br />
通过QTableView中的滑动条位置的获取与设置来实现：</p>
<pre class="brush: cpp; gutter: false">//通过其继承的函数获取当前滑动条
QScrollBar * QAbstractScrollArea::verticalScrollBar () const；
//获取当前滑动条的位置
int QAbstractSlider::value () const；
//设置当前滑动条的位置
void QAbstractSlider::setSliderPosition ( int )；</pre>
<p>通过传入上一页或下一页的滑动条位置来实现翻页。<br />
上一页的位置 = 当前位置 &#8211; 一页显示的行数；<br />
下一页的位置 = 当前位置 + 一页显示的行数；<br />
注意确保位置的有效性：上一页的位置&gt;=0；下一页的位置&lt;=最大位置；<br />
滑动条能移动的最大位置获取：<br />
int QAbstractSlider::maximum () const；</p>
<p>2、QTableView QTableWidget中平均分布各列（行）或者使最后一列自适应宽度的实现</p>
<pre class="brush: cpp; gutter: false">//使行列头自适应界面宽度
QHeaderView * QTableView::horizontalHeader () const； //行标题
QHeaderView * QTableView::verticalHeader () const； //列标题
void QHeaderView::setStretchLastSection ( bool stretch );//最后一行（列）填充空白
void QHeaderView::setResizeMode ( ResizeMode mode = QHeaderView::Stretch )；//所有行（列）均分填充空白</pre>
<p>3、QListWidget中条目的删除实现</p>
<pre class="brush: cpp; gutter: false">//先移除该条目的父子关系
QListWidgetItem * QListWidget::takeItem ( int row )；//移除后不再由Qt管理该对象，必须进行手动delete
//然后手动delete该条目
delete pTmpListWidgetItem；//例子
使用下面的函数不能实现条目的删除效果：
void QListWidget::removeItemWidget ( QListWidgetItem * item )；//introduced in Qt 4.3.</pre>
<p>4、QWidget关闭时对用户进行关闭提示的实现<br />
通过重载closeEvent()事件处理函数来实现<br />
void QWidget::closeEvent ( QCloseEvent * event )； [virtual protected]<br />
示例：</p>
<pre class="brush: cpp; gutter: true">void CExecResultWidget::closeEvent(QCloseEvent *event)
{
	int ret = QMessageBox::question(this, tr(&quot;关闭窗口&quot;), 
		tr(&quot;是否确定关闭当前执行方案结果界面？&quot;), 
		QMessageBox::Yes |QMessageBox::No,QMessageBox::No);
	if(ret == QMessageBox::Yes)
	{
		event-&gt;accept();
	}
	else 
	{
		event-&gt;ignore();
	}
}</pre>
<p>5、登录对话框类GUI的实现机制<br />
使用QDialog的exec()函数与Accepted/Rejected属性实现</p>
<p>6、QWidget关闭内容，关闭程序时关闭所有打开窗口的实现</p>
<pre class="brush: cpp; gutter: false">//关闭相关的槽函数
//发送QCloseEvent，closeEvent()默认实现为隐藏QWidget，与setAttribute()的设置有关
bool QWidget::close (); [slot] 
//应用成功退出，等价于调用exit(0)
void QCoreApplication::quit (); [static slot]
//结束exec的事件循环，退出应用：0表示成功，否则失败
void QCoreApplication::exit ( int returnCode = 0 )； [static]</pre>
<p>关闭程序时关闭所有打开窗口的实现<br />
方法一：建立各窗口之间的父子关系，则关闭父窗口时，所有的子窗口将被关闭<br />
方法二：在main.cpp中连接信号void QApplication::lastWindowClosed ();[signal]到quit函数</p>
<pre class="brush: cpp; gutter: false">//1.首先设置主窗口的属性，也可以不设，因为默认所有的QWidget该属性为真
void QWidget::setAttribute(Qt::WA_QuitOnClose,true); 
//2.因为默认的关系，必须设置其它独立窗口的该属性为false，只能有一个窗口的该属性为真
void QWidget::setAttribute(Qt::WA_QuitOnClose,false); 
//3.在main.cpp中连接信号与槽
QApplication a(argc, argv);
a.connect(&amp;a, SIGNAL(lastWindowClosed()), &amp;a, SLOT(quit));</pre>
<p>就可实现当关闭主窗口时，所有的打开窗口都会因程序退出而被关闭。</p>
<p>7、父子QWidget的关系与独立窗口的父子QWidget实现</p>
<ul>
<li>存在父子关系的widgets，每个子widget都显示在父widget内.</li>
<li>当父widget析构时，所有的子widget自动析构</li>
<li>如果一个widget构造时没有父对象，那么被视为一个窗口，或者顶级widget.</li>
<li>当一个QDialog为一个widget的子widget时，可以显示为一个独立的窗口，但是一个QWidget为一个widget时则显示在父QWidget内.</li>
<li>一个QMainWindow窗口中不能再设置布局，只能设置中心QWidget，因此间接的布局方法是借用中心窗体</li>
</ul>
<pre class="brush: cpp; gutter: false">QWidget widget.setLayout(pMainLayout);
QMainWindow mainwindow.setCentralWidget(widget);</pre>
<p>&nbsp;</p>
<ul>
<li>一个QDialog中可以再设置布局</li>
</ul>
<p>8、Qt中使用信号与槽机制时的注意事项</p>
<ul>
<li>信号与槽的实现函数中，函数的参数要慎重的使用C++的引用，因为引用的数据可能已经被析构掉了.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://lizehong.freevar.com/?feed=rss2&#038;p=301</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>工作笔记（02/2012）</title>
		<link>http://lizehong.freevar.com/?p=297</link>
		<comments>http://lizehong.freevar.com/?p=297#comments</comments>
		<pubDate>Thu, 19 Jul 2012 13:28:04 +0000</pubDate>
		<dc:creator>Lee</dc:creator>
				<category><![CDATA[Qt应用]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[QTE]]></category>
		<category><![CDATA[工作]]></category>
		<category><![CDATA[笔记]]></category>

		<guid isPermaLink="false">http://lizehong.freevar.com/?p=297</guid>
		<description><![CDATA[1.设置widget背景图片 使用QPalette属性，相关的方法: setAutoFillBackground(true); palette.setBrush(...); setPalette(palette); setMask(pixmap.mask()); 2.去掉widg … <a href="http://lizehong.freevar.com/?p=297"> Continue reading <span class="meta-nav">&#8594; </span></a>]]></description>
			<content:encoded><![CDATA[<p>1.设置widget背景图片<br />
使用QPalette属性，相关的方法:</p>
<pre class="brush: cpp; gutter: true">setAutoFillBackground(true);
palette.setBrush(...);
setPalette(palette);
setMask(pixmap.mask());</pre>
<p>2.去掉widget的标题栏方法</p>
<pre class="brush: cpp; gutter: true">setWindowFlags（Qt::FramelessWindowHint);</pre>
<p>3.Qt接口实现本地文件的列表显示与删除拷贝实现</p>
<pre class="brush: cpp; gutter: true">QFileInfoList filelist = dir.entryInfoList(string, QDir::Files, QDir::Name); //获取文件列表
QFileInfoList QDir::entryInfoList ( const QStringList &amp; nameFilters, Filters filters = NoFilter, SortFlags sort = NoSort ) const
bool QDir::remove(const QString &amp;filename); //删除文件
bool QFile::copy ( const QString &amp; fileName, const QString &amp; newName ) [static] //拷贝文件</pre>
<p>4.列表视图中实现单元格的合并与表格线的隐藏</p>
<pre class="brush: cpp; gutter: true">QTableView::setSpan(int row, int column, int rowspan, int columnspan);
QTableView::setShowGrid(bool);</pre>
<p>5.QTableWidget方法</p>
<pre class="brush: cpp; gutter: true">void setSelectionBehavior ( QAbstractItemView::SelectRows)；//整行选中
void setSelectionMode ( QAbstractItemView::SingleSelection)；//单选
void setEditTriggers ( QAbstractItemView::NoEditTriggers )；//禁止编辑
tablewidget-&gt;verticalHeader()-&gt;setHiddern(true); //自动行名隐藏
void QTableWidgetItem::setFlags(Qt::ItemIsSelectable); //单元格变灰</pre>
<p>6.Qt应用的开发</p>
<pre class="brush: cpp; gutter: true">void setupUI(); //绘制显示界面
int initUI(); //加载界面显示的数据
void connects(); //所有的信号与槽的连接</pre>
<p>7.QThread线程的使用</p>
<ul>
<li>QThread::run()函数对线程的作用相当于main函数对于应用程序的作用，它是线程的入口，run()的开始和结束意味着线程的开始与结束。</li>
<li>QThread::start()函数负责启动线程</li>
<li>QWidget及其子派生类不能在次线程中创建或使用</li>
<li>QThread对象本身所在的线程和它管理的线程不是同一个线程</li>
<li>在QThread派生类中定义的槽是在主线程而不是次线程中执行的，除非使用moveToThread()函数指定；只有run函数内的代码才是在次线程中执行的代码</li>
<li>QThread应该被看做是OS线程的接口或控制点，而不应该包含需要在新线程中运行的代码</li>
</ul>
<p>推荐的使用方法：把线程的代码放到一个QObject的子类中，然后将该子类的对象moveToThread到新线程中。</p>
<p>8.Qt/Embedded Linux</p>
<ul>
<li>不使用X窗口系统，实现自己的窗口系统：QWS</li>
<li>要运行Qt/Embedd Linux程序，必须首先创建一个进程作为GUI服务器，负责为客户端分配屏幕区域，生成鼠标和键盘事件；任何程序都可以成为服务器，通过在命令行指定-qws参数，或者将QApplication::GuiServer作为QApplicaiton构造函数的第三个参数</li>
<li>各种各样的环境变量会影响到Qt/Embedd Linux程序，最重要的是QWS_MOUSE_PROTO 指定鼠标设备 QWS_KEYBOARD 指定键盘类型</li>
</ul>
<p>9.单例模式<br />
[定义]一个类只有一个实例，而且自行实例化并向整个系统提供这个实例<br />
[要点]</p>
<ul>
<li>只能有一个实例</li>
<li>必须自行创建这个实例</li>
<li>必须自行向整个系统提供这个实例</li>
</ul>
<p>[模板]</p>
<pre class="brush: cpp; gutter: true">class CSingleton:
{
public:
	static CSingleton *GetInstance()
	{
		if(m_pInstance == NULL)
		{
			m_pInstance = new CSingleton();
			return m_pInstance;
		}
	}
private:
	CSingleton(){};
	static CSingleton *m_pInstance;
}</pre>
<p>10.m_pSubWiget-&gt;move(mapToGlobal(QPoint(0,0))); //使界面位置一直保持不变<br />
//把当前的逻辑坐标(0,0)映射到屏幕物理坐标上</p>
<p>11.随机数的生成 &lt;cstdlib&gt;</p>
<pre class="brush: cpp; gutter: true">int srand(seed); //指定种子，默认seed=1
srand(time(0)); //每次运行指定不一样的seed，从而生成不一样的随机数
int rand(); //生成[seed, RANDOM_MAX]之间的随机数
rand()%(b-a) + a ；//生成[a,b)之间的随机数
rand() /double(RANDOM_MAX)；//生成0-1之间的伪随机浮点数</pre>
<p>11.电路学习</p>
<ul>
<li>《模拟电路基础》清华大学，林红</li>
<li>《模拟电路基础实验教程》 清华大学，刘志军</li>
</ul>
<p>12.使用focusNextChild()/focusPreviousChild()函数控制widget中焦点的转移</p>
<p>13.图形widget的绘制,示例：</p>
<pre class="brush: cpp; gutter: true">void CWaveCurveWidget::paintEvent(QPaintEvent *)
{
    QPainter paint(this);
    paint.setBrush(Qt::black);//设置绘制背景的笔的颜色
    paint.setViewport(0,0,this-&gt;width(),this-&gt;height());//设置视口，物理坐标
    paint.setWindow(QRect(0,-this-&gt;height()/2,this-&gt;width(),this-&gt;height()));//设置窗口，逻辑坐标
    paint.drawRect(0,-this-&gt;height()/2,this-&gt;width(),this-&gt;height());//绘制背景
    drawGrid(paint);
    drawCurves(paint);
}</pre>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://lizehong.freevar.com/?feed=rss2&#038;p=297</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>工作笔记（2011）</title>
		<link>http://lizehong.freevar.com/?p=295</link>
		<comments>http://lizehong.freevar.com/?p=295#comments</comments>
		<pubDate>Wed, 18 Jul 2012 14:56:23 +0000</pubDate>
		<dc:creator>Lee</dc:creator>
				<category><![CDATA[Qt应用]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[QTE]]></category>
		<category><![CDATA[工作]]></category>
		<category><![CDATA[笔记]]></category>

		<guid isPermaLink="false">http://lizehong.freevar.com/?p=295</guid>
		<description><![CDATA[1.触摸屏支持库tslib————开源项目，为触摸屏驱动和应用层之间提供适配层。 2.缺陷管理系统：BugFree (开源软件) BugZilla Mantis&#8230; 3.在Ubuntu系统上执行操作出现一些奇怪的问题时，检查该操作是否需要root权限的执行。 4.Qt的 … <a href="http://lizehong.freevar.com/?p=295"> Continue reading <span class="meta-nav">&#8594; </span></a>]]></description>
			<content:encoded><![CDATA[<p>1.触摸屏支持库tslib————开源项目，为触摸屏驱动和应用层之间提供适配层。</p>
<p>2.缺陷管理系统：BugFree (开源软件) BugZilla Mantis&#8230;</p>
<p>3.在Ubuntu系统上执行操作出现一些奇怪的问题时，检查该操作是否需要root权限的执行。</p>
<p>4.Qt的二维图形引擎是基于QPainter类的，通过重新实现paintEvent()函数可定制各种窗口部件。</p>
<p>5.渐变填充利用颜色插值使得两个颜色或更多颜色之间能够平滑过渡。常被用来创建三维效果。<br />
Qt支持三种渐变：线性渐变(QLinearGradient)、锥形渐变(QRadiaalGradient)、辐射渐变(QConicalGradient)</p>
<p>6.视口、窗口、世界矩阵决定了如何将QPainter的逻辑坐标映射到设备的物理绘图坐标<br />
视口：物理坐标系下指定的任意矩形 设置视口：QPainter::setViewPort();<br />
窗口：逻辑坐标系下的同一矩形 设置窗口：QPainter::setWindow();<br />
物理坐标系与逻辑坐标系是一致的，该机制对于编写独立于绘制设备大小和分辨率的绘制代码很有用。<br />
世界变换(QTransform)使用变换矩阵，允许移动、缩放、旋转或拉伸，或者使用QPainter的translate()/scale()/rotate()/shear()函数</p>
<p>7.QImage &#8211;Qt内置的绘图引擎，实现与平台无关的高质量绘图，强大特性：支持复合模式。</p>
<p>8.Qt基于项的图形视图体系：QGraphicsView/QGraphicsScene/QGraphicsItem体系</p>
<ul>
<li>体系的坐标系统：视口坐标、场景坐标、项坐标</li>
<li>场景坐标：逻辑坐标，用来布置场景中的项</li>
<li>项坐标：针对某一项，以(0,0)为中心，在场景中移动项时，项坐标保持不变</li>
</ul>
<p>9.Qt中窗口部件风格(QStyle)</p>
<ul>
<li>Plastique————KDE下Qt/X11应用程序的默认风格</li>
<li>cleanlooks————GNOME下应用程序的默认风格</li>
</ul>
<p>10.Qt信号与槽机制</p>
<ul>
<li>[1]一个信号可以连接多个槽，但各个槽的调用顺序是不确定的</li>
<li>[2]多个信号可以连接同一个槽</li>
<li>[3]一个信号可以连接到另一个信号</li>
<li>[4]信号与槽的参数必须有相同的类型与相同的顺序</li>
<li>[5]信号的参数如果多于槽，则被简单地忽略</li>
<li>[6]信号与槽不存在或者参数不匹配时，Qt只发出警告</li>
</ul>
<p>11.Qt的元对象系统机制提供两项技术：信号与槽机制、内省机制</p>
<ul>
<li>为了使moc能够正常运行，必须把类的定义与实现分开</li>
</ul>
<p>12.Qt的资源系统：在应用程序的可执行文件中嵌入二进制的数据或文本<br />
通过资源编译器rcc，可将资源转换为C++代码资源文件(xml文件) .qrc</p>
<p>13.Qt中的连接函数connect()绑定sender与receiver时，指针必须有明确的对象，否则程序异常终止。</p>
<p>14.Qt中的鼠标事件中想x()/y()函数返回的坐标是相对于接收事件的窗体的坐标。</p>
<p>15.Qt中获取设备显示屏的分辨率:QDesktopWidget类<br />
QApplication::desktop()-&gt;width(); QApplication::desktop()-&gt;height();</p>
<p>16.setWindowFlag(Qt::FramelessWindowHint); 设置窗体不含边框与标题栏<br />
setWindowOpacity()设置窗体的透明度<br />
实现程序启动画面：QSplashScreen类，在main()函数中实现</p>
<p>17.代码的可视化编辑与查看，可以通过Notepa++的插件“带颜色复制”，粘贴到word中一定程度的实现</p>
<p>18.应用程序进行编译的优化级别会影响程序的功能实现，小心地测试优化级别的正确性。</p>
<p>19.linux中列出当前目录下的子目录命令：</p>
<pre class="brush: bash; gutter: false">ls -F | grep /$
ls -l | grep &quot;^d&quot;</pre>
<p>20.离散傅里叶分析(DFT)是频谱分析的常用方法。</p>
<p>21.正则表达式：用来筛选文本的模式</p>
<ul>
<li>正则表达式引擎：解释正则表达式模式并使用这些模式匹配文本的基础软件</li>
<li>POSIX引擎: BRE ERE</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://lizehong.freevar.com/?feed=rss2&#038;p=295</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WP高亮插件wp-syntax与Mantra主题冲突解决小记</title>
		<link>http://lizehong.freevar.com/?p=280</link>
		<comments>http://lizehong.freevar.com/?p=280#comments</comments>
		<pubDate>Sat, 14 Jul 2012 14:05:41 +0000</pubDate>
		<dc:creator>Lee</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[mantra]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://lizehong.freevar.com/?p=280</guid>
		<description><![CDATA[昨天计划着在博客上发几篇以前整理的技术文章，在整理时发现有不少代码片段，想起以前看别人的博客时文中代码的高亮显示，以及开源中国中的代码片段插入，觉着wordpress中肯定也能实现这样的功能，于是就整这个功能到现在。实现后的效果： 本来是一件很简单的事：上网找一个大家常用流行的代 … <a href="http://lizehong.freevar.com/?p=280"> Continue reading <span class="meta-nav">&#8594; </span></a>]]></description>
			<content:encoded><![CDATA[<p>昨天计划着在博客上发几篇以前整理的技术文章，在整理时发现有不少代码片段，想起以前看别人的博客时文中代码的高亮显示，以及开源中国中的代码片段插入，觉着wordpress中肯定也能实现这样的功能，于是就整这个功能到现在。实现后的效果：</p>
<p style="text-align: center;"><a href="http://lizehong.freevar.com/wordpress/wp-content/uploads/2012/07/syntaxgood.png" target="_blank"><img class="aligncenter  wp-image-281" title="syntaxgood" src="http://lizehong.freevar.com/wordpress/wp-content/uploads/2012/07/syntaxgood.png" alt="" width="255" height="244" /></a></p>
<p style="text-align: left;">本来是一件很简单的事：上网找一个大家常用流行的代码高亮插件，在wordpress中搜索到该插件，安装好，然后上网熟悉一下使用方法，一切就OK了的。如果一切顺利30分钟就可以结束这次需求。</p>
<ol>
<li>百度“wordpress语法高亮插件”，一大堆的博客文章推荐介绍相关的方法和插件的，我看了一下这篇文章：<a href="http://article.yeeyan.org/view/119553/94844/" target="_blank">wordpress代码高亮插件指南</a>，大概对常用的插件及其特点有了个了解，然后做了和作者一样的选择：<em>Syntax Highlighter and Code Colorizer for WordPress</em> 。</li>
<li>wordpress后台中选择插件，安装插件，搜索到该插件，安装后启用，这个没什么问题。</li>
<li>找使用方法，由于该插件已经两年没有更新了，链接老半天才能打开，也没找到官方的guidelines，只好继续百度。方法都很简单，就下面一句话：
<pre class="brush: text; gutter: true; first-line: 1; highlight: []; html-script: false">&lt;pre class=&quot;brush:name&quot;&gt;...your code...&lt;/pre&gt;</pre>
<p>使用时把上面的name替换成你的代码类型名，如：shell,c,c++,java,php等，注意小写，把代码放在“&#8230;your code&#8230;”的位置。我跟着照办，以为是结束，却是问题的开始。</li>
</ol>
<p>大部分人在完成上面的三步后应该就可以得到我上面的高亮效果了，如果有朋友做完上面三步后测试看到了和我下面相似的结果，那可以参考一下我的解决过程，我做完后测试得到的结果:</p>
<p><a href="http://lizehong.freevar.com/wordpress/wp-content/uploads/2012/07/syntax.png"><img class="aligncenter size-medium wp-image-282" title="syntax" src="http://lizehong.freevar.com/wordpress/wp-content/uploads/2012/07/syntax-300x179.png" alt="" width="300" height="179" /></a></p>
<p>很让人无语的效果。由于是wordpress的新手，对插件不熟，同时对php、CSS、html等也不懂，一下子就蒙了。怀疑出问题的原因有：插件与3.4版不兼容、插件本身有问题、相关的设置有问题等，于是我又重新百度新的插件、该插件更详细的使用方法，结果还是不行。我还新安装了个WP SyntaxHighlighter的插件，问题还是一样。</p>
<p>正在一筹莫展时，想起之前测试用的xampp平台，刚好可以在localhost上试试这些插件。结果一试还真就没问题，一对比发现区别在于主题：localhost上使用的是自带的Twenty-eleven主题，个人博客上是我安装的Mantra主题。问题根源出来了：主题和插件有冲突。好吧，第一想法换主题，重新安装了个Green One的主题，安装后测试没问题。不过它的字太小了，字体我也不喜欢，那就修改样式文件吧，又百度了一个小时左右，知道了style.css文件，和一些css的属性，结果不如人意。还是喜欢Mantra的主题，设置方面，有专门的settings界面。重新换回Mantra主题，第二方法，解决到主题和插件的冲突，继续百度。</p>
<p>找到一篇相关的博文：<a title="WP高亮插件WP-Syntax与zBench样式的冲突解决小记" href="http://jotcmd.com/231/wp-syntax-zbench-conflict/" target="_blank">WP高亮插件WP-Syntax与zBench样式的冲突解决小记</a>，不过和我的主题不一样。参考文中提供的方法，修改style.css，可是我没有找到wp-syntax.css文件，只找到了一个pre.css文件，只能参照着改。结果还是不行，依然没有解决掉。没有办法，参照文中作者的思路，我找到主题中所有的CSS文件，把其中的table、td元素相关的属性都注释掉，试了一下，还是不行。</p>
<p>在打算放弃这个主题时，我想到了最后一个方法：对比Twenty-eleven主题和Mantra主题的style.css文件，一点一点代码的排除。因为这两个文件肯定有很大的差异，这几乎就是蛮力，死马当活马医了。很快我就找到了问题代码：</p>
<pre class="brush: css; gutter: true">.entry-content code {
 background-color: #FAFAFA;
 border-left: 5px solid #EEEEEE;
 clear: both;
 color: #1B1B1B;
 display: block;
 float: none;
 margin: 0 auto;
 overflow: auto;
 padding: 10px !important;
 text-indent: 0;
 white-space: nowrap;
 width: 95% !important;
 }</pre>
<p>继续排除，确定了是display和overflow这两个属性的设置导致的，百度CSS中这两个属性值的含义：<a title="display属性" href="http://www.w3school.com.cn/css/pr_class_display.asp" target="_blank">display 属性</a>规定元素应该生成的框的类型；<a title="overflow属性" href="http://www.w3school.com.cn/css/pr_pos_overflow.asp" target="_blank">overflow 属性</a>规定当内容溢出元素框时发生的事情，看了一下可以设置的属性值，改成：display：inline；overflow：visible；后，问题解决了。</p>
<p>最后我选择了WP SyntaxHighlighter插件，原因是它有对应的属性设置功能，可以自己进行调整，而<em>Syntax Highlighter and Code Colorizer for WordPress</em> 没有。</p>
<p>就这么个小功能浪费了我难得的一个星期六休息天，真是隔行如隔山，要是懂点CSS的东西，估计这问题也就不会纠结一天，看来还是要多花时间扩展知识面。</p>
]]></content:encoded>
			<wfw:commentRss>http://lizehong.freevar.com/?feed=rss2&#038;p=280</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>wordpress3.4菜单实现分类导航</title>
		<link>http://lizehong.freevar.com/?p=43</link>
		<comments>http://lizehong.freevar.com/?p=43#comments</comments>
		<pubDate>Sun, 08 Jul 2012 13:57:20 +0000</pubDate>
		<dc:creator>Lee</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://lizehong.freevar.com/wordpress/?p=43</guid>
		<description><![CDATA[今天下午把wordpress基本设置弄好以后，就开始计划着手把博客的基本框架给搭建起来，安装了一个mantra的黑色格调主体，刚好与博客的名字相搭。之后就开始规划分类和页面。因为对页面使用、分类导航理解不清，以及对菜单使用完全不清楚，走了将近3个多小时的弯路，最后才通过导航菜单实 … <a href="http://lizehong.freevar.com/?p=43"> Continue reading <span class="meta-nav">&#8594; </span></a>]]></description>
			<content:encoded><![CDATA[<p>今天下午把wordpress基本设置弄好以后，就开始计划着手把博客的基本框架给搭建起来，安装了一个mantra的黑色格调主体，刚好与博客的名字相搭。之后就开始规划分类和页面。因为对页面使用、分类导航理解不清，以及对菜单使用完全不清楚，走了将近3个多小时的弯路，最后才通过导航菜单实现需求。</p>
<ul>
<li>需求：在博客的开头实现想要的分类和页面导航。</li>
<li>错误理解：页面类似文件夹或者onenote中的笔记本之类，可以往里面添加文章，因此就可以实现分类了；</li>
<li>正确理解：页面是一个单页容器，是用来在其中添加和某一主题紧密相关的内容。</li>
<li>弯路方法：页面关系分类目录，未奏效</li>
</ul>
<p>上网搜索“wordpress中把分类目录作为一个页面”，出来一大堆的结果，真在庆幸马上可以解决问题了，看来一下它们的解决方法，大部分都是添加新的页面模板，修改模板代码实现的。步骤写的也蛮详细，我也就照着尝试了一下，结果把相应页面模板修改好加进去后，在后台的页面属性模板中找不到新加的页面模板。反复检查代码都没错，就是找不到，网上也没搜到和这相关的问题，一时不知道咋办了。</p>
<ul>
<li>正确方法：使用菜单简单高效实现</li>
</ul>
<p>在百度页面往下找，看到一个说用菜单实现的，感觉挺有道理。看了一下，文章讲的不是很清楚，于是继续百度&#8221;wordpress中菜单使用&#8221;，看了百度第一篇：<a href="http://zmingcx.com/wordpress3-0-using-the-navigation-menu-graphic-tutorials.html">http://zmingcx.com/wordpress3-0-using-the-navigation-menu-graphic-tutorials.html</a>，看完以后恍然大悟，原来菜单是这样用的，片刻之后搞定。</p>
<ul>
<li>菜单理解：</li>
</ul>
<p>wordpress中的菜单实际上应该理解成菜单栏，因为它相当于windows中窗口的菜单栏而不是其中的一个菜单，而添加到wordpress菜单中的项：自定义链接、分类目录、页面等才是我们平常理解的菜单概念。不同的主题对可以实现的wordpress菜单有限制，如mantra主体可以添加三个，菜单管理界面左侧的主题位置是指wordpress菜单在主题中放置位置。</p>
<p>就这么一个简单的问题却耗费了我将近4个小时，让我唏嘘不已。我意识到一些重要的问题：</p>
<p>1、对于一个学习某种技术的新手而言，入门期的一些简单问题会浪费他们的大量时间却不会给他们等价的经验价值，良好的策略是让一个对该技术熟练的人带着新手快速地度过入门期，这将提高整个团队和组织的效率。替代的方案是提供给新手详尽的入门熟悉文档。</p>
<p>2、在网络信息时代，问题总是可以通过网络得到解决，而体现能力的是你的效率，即：同一个问题的解决时间。而这取决于对问题的理解和对网络搜索的熟练，进一步取决于知识结构的广度与深度。这意味着，重要的不是你知道多少，而是你理解多少，以及网络对于优秀的人的重要性。</p>
]]></content:encoded>
			<wfw:commentRss>http://lizehong.freevar.com/?feed=rss2&#038;p=43</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>技术引言</title>
		<link>http://lizehong.freevar.com/?p=34</link>
		<comments>http://lizehong.freevar.com/?p=34#comments</comments>
		<pubDate>Sun, 08 Jul 2012 12:43:54 +0000</pubDate>
		<dc:creator>Lee</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[technology]]></category>

		<guid isPermaLink="false">http://lizehong.freevar.com/wordpress/?p=34</guid>
		<description><![CDATA[技术改变了我们每个人的生活，而对技术的迷恋则改变了我的人生。我深陷这样的一种矛盾中：技术可以实现一切和技术仅仅只是工具。在这个信息时代，我属于技术流派，相信随着时间的发展，技术将呈爆炸式进步，这将深刻地改变人类的生活，我更多地倾向于好的方面，然后却也无法忘却坏的一面。现在我对各种 … <a href="http://lizehong.freevar.com/?p=34"> Continue reading <span class="meta-nav">&#8594; </span></a>]]></description>
			<content:encoded><![CDATA[<p>技术改变了我们每个人的生活，而对技术的迷恋则改变了我的人生。我深陷这样的一种矛盾中：技术可以实现一切和技术仅仅只是工具。在这个信息时代，我属于技术流派，相信随着时间的发展，技术将呈爆炸式进步，这将深刻地改变人类的生活，我更多地倾向于好的方面，然后却也无法忘却坏的一面。现在我对各种新的技术充满浓厚的兴趣，尤其是计算技术，我致力于充分的利用现有的技术来改善生活，同时也希望能够对技术的发展有所助益。</p>
]]></content:encoded>
			<wfw:commentRss>http://lizehong.freevar.com/?feed=rss2&#038;p=34</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux开机程序自启动实现</title>
		<link>http://lizehong.freevar.com/?p=186</link>
		<comments>http://lizehong.freevar.com/?p=186#comments</comments>
		<pubDate>Thu, 19 Apr 2012 13:53:03 +0000</pubDate>
		<dc:creator>Lee</dc:creator>
				<category><![CDATA[Linux开发]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://lizehong.freevar.com/?p=186</guid>
		<description><![CDATA[1.使程序在登录之前自动启动 把相应的启动脚本或者程序启动命令加入到inittab或者/etc/rc.local脚本中 注意此时还没有加载profile配置，无法使用登录后的环境变量 2.使程序在登录后自动启动 所有用户登录都自动启动：把脚本或程序放到/etc/profile脚本 … <a href="http://lizehong.freevar.com/?p=186"> Continue reading <span class="meta-nav">&#8594; </span></a>]]></description>
			<content:encoded><![CDATA[<p>1.使程序在登录之前自动启动<br />
把相应的启动脚本或者程序启动命令加入到inittab或者/etc/rc.local脚本中<br />
注意此时还没有加载profile配置，无法使用登录后的环境变量</p>
<p>2.使程序在登录后自动启动<br />
所有用户登录都自动启动：把脚本或程序放到/etc/profile脚本文件中<br />
特定用户登录自动启动：把脚本或程序放到用户home目录下的相应配置文件中，如：.bash_profile/.bash_login/.profile</p>
<p>3.使程序在登出时自动运行<br />
把脚本或程序放到用户home目录下的.bash_logout文件中</p>
]]></content:encoded>
			<wfw:commentRss>http://lizehong.freevar.com/?feed=rss2&#038;p=186</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux启动过程及相关配置文件</title>
		<link>http://lizehong.freevar.com/?p=183</link>
		<comments>http://lizehong.freevar.com/?p=183#comments</comments>
		<pubDate>Thu, 19 Apr 2012 13:47:14 +0000</pubDate>
		<dc:creator>Lee</dc:creator>
				<category><![CDATA[Linux开发]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://lizehong.freevar.com/?p=183</guid>
		<description><![CDATA[Linux的不行发行版之间使用的文件系统不一致，因此导致了Linux启动过程所涉及的一些相关配置文件也各不相同，容易导致混乱。主要是体现在Linux的init进程启动的过程： Red Hat下相关的配置文件为： /etc/inittab /etc/rc.d/rc.sysinit  … <a href="http://lizehong.freevar.com/?p=183"> Continue reading <span class="meta-nav">&#8594; </span></a>]]></description>
			<content:encoded><![CDATA[<p>Linux的不行发行版之间使用的文件系统不一致，因此导致了Linux启动过程所涉及的一些相关配置文件也各不相同，容易导致混乱。主要是体现在Linux的init进程启动的过程：<br />
Red Hat下相关的配置文件为：</p>
<p style="padding-left: 30px;">/etc/inittab<br />
/etc/rc.d/rc.sysinit<br />
/etc/rc.d/rcX.d/ 目录下的各符号链接<br />
/etc/rc.d/init.d/ 目录下的实际守护进程脚本<br />
/etc/rc.d/rc.local 用户自定义启动脚本</p>
<p>Ubuntu下相关的配置文件对应为：</p>
<p style="padding-left: 30px;">/etc/inittab （有的好像没有这个文件）<br />
/etc/rcS.d/ 目录下的启动服务符号链接<br />
/etc/rcX.d/ 各运行等级对应的启动目录,X:0-6<br />
/etc/init.d/ 实际的服务启动脚本<br />
/etc/rc.local 用户自定义启动脚本</p>
<p>下面主要就Ubuntu系统下的配置文件之间的关联进行一个整理：</p>
<ol>
<li>init进程读取inittab文件，启动rcS.d目录下的所有服务，确定启动运行级别(initdefault),依据顺序停止[K]或启动[S]对应运行级别rcX.d/目录下的服务</li>
<li>rcS.d/rcX.d目录下的文件均为init.d目录下的服务脚本的符号链接，通过标识[K]标明停止，标识[S]标明启动.</li>
<li>三个文件：/etc/init.d/rc  /etc/init.d/rc.local  /etc/init.d/rcS</li>
</ol>
<ul>
</ul>
<ul>
<li>rc脚本通过第一个参数确定具体的服务运行目录/级别,如rc S 执行rcS.d/下的服务，rc 5 执行rc5.d/下的服务等。</li>
<li>rc.local脚本根据标识执行或停止/etc/rc.local脚本(如果存在)，默认/etc/rc.local文件中没有任何内容，或者有一句 exit 0；可以在其中添加自定义的启动程序。</li>
<li>rcS脚本执行rcS.d/下的所有服务：exec /etc/init.d/rc S</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://lizehong.freevar.com/?feed=rss2&#038;p=183</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
