?? tutorial1-06.html
字號:
<!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:580 -->
<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="t6.png" alt="Screenshot of tutorial six"></center>
<p> 這個例子顯示了如何把兩個窗口部件封裝成一個新的組件和使用許多窗口部件是多么的容易。首先,我們使用一個自定義的窗口部件作為一個子窗口部件。
<p> <a name="main"></a>
<pre>/****************************************************************
**
** Qt教程一 - 6
**
****************************************************************/
#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>>
#include <<a href="qgrid-h.html">qgrid.h</a>>
class LCDRange : public <a href="qvbox.html">QVBox</a>
{
public:
LCDRange( <a href="qwidget.html">QWidget</a> *parent=0, const char *name=0 );
};
<a name="f551"></a>LCDRange::LCDRange( <a href="qwidget.html">QWidget</a> *parent, const char *name )
: <a href="qvbox.html">QVBox</a>( parent, name )
{
<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)) );
}
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="f552"></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="qgrid.html">QGrid</a> *grid = new <a href="qgrid.html">QGrid</a>( 4, this );
for( int r = 0 ; r < 4 ; r++ )
for( int c = 0 ; c < 4 ; c++ )
(void)new LCDRange( grid );
}
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> class LCDRange : public <a href="qvbox.html">QVBox</a>
{
public:
LCDRange( <a href="qwidget.html">QWidget</a> *parent=0, const char *name=0 );
};
</pre>
<p> LCDRange窗口部件是一個沒有任何API的窗口部件。它只有一個構(gòu)造函數(shù)。這種窗口部件不是很有用,所以我們一會兒會加入一些API。
<p> <pre> LCDRange::LCDRange( <a href="qwidget.html">QWidget</a> *parent, const char *name )
: <a href="qvbox.html">QVBox</a>( parent, name )
{
<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" );
<a name="x2257"></a> slider-><a href="qrangecontrol.html#setRange">setRange</a>( 0, 99 );
<a name="x2258"></a> slider-><a href="qslider.html#setValue">setValue</a>( 0 );
<a name="x2259"></a><a name="x2256"></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="tutorial1-05.html#constructor">MyWidget的構(gòu)造函數(shù)</a>。唯一的不同是按鈕被省略了并且這個類被重新命名了。
<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> MyWidget也是除了一個構(gòu)造函數(shù)之外沒有包含任何API。
<p> <pre> 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" );
<a name="x2260"></a> quit-><a href="qwidget.html#setFont">setFont</a>( QFont( "Times", 18, QFont::Bold ) );
<a name="x2253"></a> <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>()) );
</pre>
<p> 這個按鈕被放在LCDRange中,這樣我們就有了一個“Quit”按鈕和許多LCDRange對象。
<p> <pre> <a href="qgrid.html">QGrid</a> *grid = new <a href="qgrid.html">QGrid</a>( 4, this );
</pre>
<p> 我們創(chuàng)建了一個四列的<a href="qgrid.html">QGrid</a>對象。這個QGrid窗口部件可以自動地把自己地子窗口部件排列到行列中,你可以指定行和列的數(shù)量,并且QGrid可以發(fā)現(xiàn)它的新子窗口部件并且把它們安放到網(wǎng)格中。
<p> <pre> for( int r = 0 ; r < 4 ; r++ )
for( int c = 0 ; c < 4 ; c++ )
(void)new LCDRange( grid );
</pre>
<p> 四行,四列。
<p> 我們創(chuàng)建了一個4*4個LCDRanges,所有這些都是這個grid對象的子窗口部件。這個QGrid窗口部件會安排它們。
<p> <pre> }
</pre>
<p> 這就是全部了。
<p> <h2> 行為
</h2>
<a name="2"></a><p> 這個程序顯示了在同一時間使用許多窗口部件是多么的容易。其中的滑塊和LCD數(shù)字的行為在前一章已經(jīng)提到過了。還有就是,就是實現(xiàn)的不同。
<p> (請看<a href="tutorial1-01.html#compiling">編譯</a>來學(xué)習(xí)如何創(chuàng)建一個makefile和連編應(yīng)用程序。)
<p> <h2> 練習(xí)
</h2>
<a name="3"></a><p> 在開始的時候使用不同的或者隨機的值初始化每個滑塊。
<p> 源代碼中的“4”出現(xiàn)了3次。如果你改變<a href="qgrid.html">QGrid</a>構(gòu)造函數(shù)中調(diào)用的那個,會發(fā)生什么?改變另外兩個又會發(fā)生什么呢?為什么呢?
<p> 現(xiàn)在你可以進行<a href="tutorial1-07.html">第七章</a>了。
<p> [<a href="tutorial1-05.html">上一章</a>]
[<a href="tutorial1-07.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
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -