?? tutorial1-05.html
字號(hào):
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- /home/reggie/tmp/qt-3.0-reggie-5401/qt-win-commercial-3.0.5/doc/tutorial.doc:487 -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="Translator" content="Cavendish">
<meta name="Qt zh_CN Documents Website" content="http://www.qiliang.net/qt">
<title>Qt教程一 —— 第五章:組裝積木</title>
<style type="text/css"><!--
h3.fn,span.fn { margin-left: 1cm; text-indent: -1cm; }
a:link { color: #004faf; text-decoration: none }
a:visited { color: #672967; text-decoration: none }
body { background: #ffffff; color: black; font-family: "Times New Roman" }
--></style>
</head>
<body>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr bgcolor="#E5E5E5">
<td valign=center>
<a href="index.html">
<font color="#004faf">主頁</font></a>
| <a href="classes.html">
<font color="#004faf">所有的類</font></a>
| <a href="mainclasses.html">
<font color="#004faf">主要的類</font></a>
| <a href="annotated.html">
<font color="#004faf">注釋的類</font></a>
| <a href="groups.html">
<font color="#004faf">分組的類</font></a>
| <a href="functions.html">
<font color="#004faf">函數(shù)</font></a>
</td>
<td align="right" valign="center"><img src="logo32.png" align="right" width="64" height="32" border="0"></td></tr></table>
<h1 align=center>Qt教程一 —— 第五章:組裝積木</h1>
<p> <center><img src="t5.png" alt="Screenshot of tutorial five"></center>
<p> 這個(gè)例子顯示了創(chuàng)建幾個(gè)窗口部件并用信號(hào)和槽把它們連接起來,和如何處理重新定義大小事件。
<p> <pre>/****************************************************************
**
** Qt教程一 - 5
**
****************************************************************/
#include <<a href="qapplication-h.html">qapplication.h</a>>
#include <<a href="qpushbutton-h.html">qpushbutton.h</a>>
#include <<a href="qslider-h.html">qslider.h</a>>
#include <<a href="qlcdnumber-h.html">qlcdnumber.h</a>>
#include <<a href="qfont-h.html">qfont.h</a>>
#include <<a href="qvbox-h.html">qvbox.h</a>>
class MyWidget : public <a href="qvbox.html">QVBox</a>
{
public:
MyWidget( <a href="qwidget.html">QWidget</a> *parent=0, const char *name=0 );
};
<a name="f550"></a>MyWidget::MyWidget( <a href="qwidget.html">QWidget</a> *parent, const char *name )
: <a href="qvbox.html">QVBox</a>( parent, name )
{
<a href="qpushbutton.html">QPushButton</a> *quit = new <a href="qpushbutton.html">QPushButton</a>( "Quit", this, "quit" );
quit-><a href="qwidget.html#setFont">setFont</a>( QFont( "Times", 18, QFont::Bold ) );
<a href="qobject.html#connect">connect</a>( quit, SIGNAL(<a href="qbutton.html#clicked">clicked</a>()), qApp, SLOT(<a href="qapplication.html#quit">quit</a>()) );
<a href="qlcdnumber.html">QLCDNumber</a> *lcd = new <a href="qlcdnumber.html">QLCDNumber</a>( 2, this, "lcd" );
<a href="qslider.html">QSlider</a> * slider = new <a href="qslider.html">QSlider</a>( Horizontal, this, "slider" );
slider-><a href="qrangecontrol.html#setRange">setRange</a>( 0, 99 );
slider-><a href="qslider.html#setValue">setValue</a>( 0 );
<a href="qobject.html#connect">connect</a>( slider, SIGNAL(<a href="qslider.html#valueChanged">valueChanged</a>(int)), lcd, SLOT(<a href="qlcdnumber.html#display">display</a>(int)) );
}
int main( int argc, char **argv )
{
<a href="qapplication.html">QApplication</a> a( argc, argv );
MyWidget w;
a.<a href="qapplication.html#setMainWidget">setMainWidget</a>( &w );
w.<a href="qwidget.html#show">show</a>();
return a.<a href="qapplication.html#exec">exec</a>();
}
</pre>
<p> <h2> 一行一行地解說
</h2>
<a name="1"></a><p> <pre> #include <<a href="qapplication-h.html">qapplication.h</a>>
#include <<a href="qpushbutton-h.html">qpushbutton.h</a>>
#include <<a href="qslider-h.html">qslider.h</a>>
#include <<a href="qlcdnumber-h.html">qlcdnumber.h</a>>
#include <<a href="qfont-h.html">qfont.h</a>>
#include <<a href="qvbox-h.html">qvbox.h</a>>
</pre>
<p> 這里顯示的是三個(gè)新的被包含的頭文件。qslider.h和qlcdnumber.h在這里是因?yàn)槲覀兪褂昧藘蓚€(gè)新的窗口部件,<a href="qslider.html">QSlider</a>和<a href="qlcdnumber.html">QLCDNumber</a>。qvbox.h在這里是因?yàn)槲覀兪褂昧薗t的自動(dòng)布局支持。
<p> <pre> class MyWidget : public <a href="qvbox.html">QVBox</a>
{
public:
MyWidget( <a href="qwidget.html">QWidget</a> *parent=0, const char *name=0 );
};
</pre>
<p> <a name="constructor"></a>
<pre> MyWidget::MyWidget( <a href="qwidget.html">QWidget</a> *parent, const char *name )
: <a href="qvbox.html">QVBox</a>( parent, name )
{
</pre>
<p> MyWidget現(xiàn)在繼承了<a href="qvbox.html">QVBox</a>,而不是<a href="qwidget.html">QWidget</a>。我們通過這種方式來使用QVBox的布局(它可以把它的子窗口部件垂直地放在自己里面)。重新定義大小自動(dòng)地被QVBox處理,因此現(xiàn)在也就被MyWidget處理了。
<p> <pre> <a href="qlcdnumber.html">QLCDNumber</a> *lcd = new <a href="qlcdnumber.html">QLCDNumber</a>( 2, this, "lcd" );
</pre>
<p> <tt>lcd</tt>是一個(gè)QLCDNumber,一個(gè)可以按像LCD的方式顯示數(shù)字的窗口部件。這個(gè)實(shí)例被設(shè)置為顯示兩個(gè)數(shù)字,并且是<em>this</em>的子窗口部件。它被命名為“l(fā)cd”。
<p> <pre> <a href="qslider.html">QSlider</a> * slider = new <a href="qslider.html">QSlider</a>( Horizontal, this, "slider" );
<a name="x2247"></a> slider-><a href="qrangecontrol.html#setRange">setRange</a>( 0, 99 );
<a name="x2248"></a> slider-><a href="qslider.html#setValue">setValue</a>( 0 );
</pre>
<p> <a href="qslider.html">QSlider</a>是一個(gè)經(jīng)典的滑塊,用戶可以通過在拖動(dòng)一個(gè)東西在一定范圍內(nèi)調(diào)節(jié)一個(gè)整數(shù)數(shù)值的方式來使用這個(gè)窗口部件。這里我們創(chuàng)建了一個(gè)水平的滑塊,設(shè)置它的范圍是0~99(包括0和99,參見<a href="qrangecontrol.html#setRange">QSlider::setRange</a>()文檔)并且它的初始值是0。
<p> <pre> <a name="x2249"></a><a name="x2246"></a> <a href="qobject.html#connect">connect</a>( slider, SIGNAL(<a href="qslider.html#valueChanged">valueChanged</a>(int)), lcd, SLOT(<a href="qlcdnumber.html#display">display</a>(int)) );
</pre>
<p> 這里我們是用了<a href="signalsandslots.html">信號(hào)/槽機(jī)制</a>把滑塊的valueChanged()信號(hào)和LCD數(shù)字的display()槽連接起來了。
<p> 無論什么時(shí)候滑塊的值發(fā)生了變化,它都會(huì)通過發(fā)射valueChanged()信號(hào)來廣播這個(gè)新的值。因?yàn)檫@個(gè)信號(hào)已經(jīng)和LCD數(shù)字的display()槽連接起來了,當(dāng)信號(hào)被廣播的時(shí)候,這個(gè)槽就被調(diào)用了。這兩個(gè)對(duì)象中的任何一個(gè)都不知道對(duì)方。這就是組件編程的本質(zhì)。
<p> 槽是和普通C++成員函數(shù)的方式不同,但有著普通C++成員函數(shù)的方位規(guī)則。
<p> <h2> 行為
</h2>
<a name="2"></a><p> LCD數(shù)字反應(yīng)了你對(duì)滑塊做的一切,并且這個(gè)窗口部件很好地處理了重新定義大小事件。注意當(dāng)窗口被重新定義大小(因?yàn)樗梢裕┑臅r(shí)候,LDC數(shù)字窗口部件也改變了大小,但是其它的還是和原來一樣(因?yàn)槿绻鼈冏兓耍雌饋砗孟窈苌担?<p> (請(qǐng)看<a href="tutorial1-01.html#compiling">編譯</a>來學(xué)習(xí)如何創(chuàng)建一個(gè)makefile和連編應(yīng)用程序。)
<p> <h2> 練習(xí)
</h2>
<a name="3"></a><p> 試著改變LCD數(shù)字,添加更多的數(shù)字或者<a href="qlcdnumber.html#setMode">改變模式</a>。你甚至可以添加四個(gè)按鈕來設(shè)置基數(shù)。
<p> 你也可以改變滑塊的范圍。
<p> 也許使用<a href="qspinbox.html">QSpinBox</a>比滑塊更好?
<p> 試著當(dāng)LCD數(shù)字溢出的時(shí)候使這個(gè)應(yīng)用程序退出。
<p> 現(xiàn)在你可以進(jìn)行<a href="tutorial1-06.html">第六章</a>了。
<p> [<a href="tutorial1-04.html">上一章</a>]
[<a href="tutorial1-06.html">下一章</a>]
[<a href="tutorial.html">教程一主頁</a>]
<p>
<!-- eof -->
<p><address><hr><div align=center>
<table width=100% cellspacing=0 border=0><tr>
<td>Copyright © 2002
<a href="http://www.trolltech.com">Trolltech</a>
<td><a href="http://www.trolltech.com/trademarks.html">Trademarks</a>
<td><a href="zh_CN.html">譯者:Cavendish</a>
<td align=right><div align=right>Qt 3.0.5版</div>
</table></div></address></body>
</html>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -