qt教程5—搭積木
檔案:
這個例子顯示了如何建立多個視窗部件並用訊號和槽把它們連線起來,以及如何處理修改大小。
#include
#include
#include
#include
#include
#include
class mywidget : public qwidget
;
mywidget::mywidget(qwidget *parent)
: qwidget(parent)
int main(int argc, char *argv)
一行一行地品讀
class mywidget : public qwidget
;
mywidget::mywidget(qwidget *parent)
: qwidget(parent)
{
qpushbutton *quit = new qpushbutton(tr("quit"));
quit->setfont(qfont("times", 18, qfont::bold));
qlcdnumber *lcd = new qlcdnumber(2);
lcd->setsegmentstyle(qlcdnumber::filled);
lcd是乙個qlcdnumber
,乙個把數字按
lcd樣式顯示的視窗部件。這個例項被設定為顯示兩個數字。我們設定
qlcdnumber::segmentstyle屬性為
qlcdnumber::filled
使lcd
更具可讀性。
歷史小記:
qlcdnumber::segmentstyle
曾是為qt
寫的第乙個視窗部件,這要追溯到
qpainter
僅僅提供乙個原始繪圖
drawline()
的時候。
tetrix
示例的初始版本,使用
qlcdnumber
來顯示分數,也是大概在那個時候寫的。
qslider *slider = new qslider(qt::horizontal);
slider->setrange(0, 99);
slider->setvalue(0);
使用者可以使用
qslider
視窗部件來在一定範圍內調節乙個整數值。
這裡我們建立了乙個水平的滑塊,設定它的最小值為
0,最大值為
99,並且初始值為
0.
connect(slider, signal(valuechanged(int)),
lcd, slot(display(int)));
這裡我們用
訊號/槽
機制把滑塊的
valuechanged()
訊號和lcd
數字的display()
槽連線起來了。
無論什麼時候滑塊的值發生改變,它會通過發射
valuechanged()
訊號來廣播這個新值。
因為這個訊號已經和
lcd數字的
display()
槽相連線,所以當訊號被廣播的時候,這個槽就被呼叫。這兩個物件中的任何乙個都不知道對方。這就是元件程式設計的本質。
槽不同於普通
c++成員函式的方式,但遵循普通
c++成員函式的使用規則。
qvboxlayout *layout = new qvboxlayout;
layout->addwidget(quit);
layout->addwidget(lcd);
layout->addwidget(slider);
setlayout(layout);
mywidget
現在使用乙個
qvboxlayout
來管理它的子視窗部件的幾何。由於這個原因,我們沒有必要像在第四章裡一樣給每個視窗部件來指明座標。另外,使用乙個
layout
來確保當視窗被改變大小的時候子視窗部件也隨之改變大小。然後我們用
qboxlayout::addwidget()給
layout
加上視窗部件
quit
,lcd
和slider。函式
qwidget::setlayout()將
layout
安裝在mywidget
上。這使得
layout
成為mywidget
的乙個子視窗部件所以我們不需要擔心它的刪除;父—子關係保證了它將被同
mywidget
一起刪除。而且,
qwidget::setlayout
()的呼叫自動的將
layout
中的視窗部件設定為「子」使得它們是
mywidget
的「子」。因為這個,我們不需要具體的去設定為像
quit
,lcd
和slider
視窗部件的「父」。在qt
中,視窗部件或者是其他視窗部件的「子」(如
this
),或者它們沒有「父」。乙個視窗部件可以被增加為
layout
,在這個
layout
負責那個視窗部件的幾何的情形下,但是這個滑塊卻不能夠像乙個「父」一樣起作用。取而代之的是,
qwidget
的建構函式包含乙個它父視窗部件的
qwidget
指標,並且
qlayout
不繼承qwidget
。執行這個程式
lcd數字反應了你對滑塊做的一切,並且這個視窗部件很好地處理了重新定義大小事件。注意當視窗被重新定義大小(因為它可以)的時候,
lcd數字視窗部件也改變了大小,但是其它的還是和原來一樣(因為否則它們看起來會很奇怪)。
練習
試著改變
lcd的個數,來新增更多的數字或者改變模式(
qlcdnumber::setmode
())。你甚至可以新增四個按鈕來設定基數
你也可以改變滑塊的範圍。
或許使用
qspinbox
比滑塊更好?
試著使應用程式在
lcd數值溢位的時候退出。
Debug參考文件
本來想自己整理一下linux除錯過程中常用的有哪一些的除錯工具,無意中發現了乙個 類似於開源書籍。中已經對於常用的一些除錯命令,做了很好的總結。這些命令主要包括 ps,top,vmstat,iostat,strace,free等,還包含了一些其它的常規命令 gdb,ldd,nm,lsof,reade...
ALV GRID參考文件 III
建立field catalog下面的步驟便是如何填充field catalog內錶。上面介紹了field catalog的行型別的各個字段。為了正確的填充每一列的field catalog 的字段,下面的這幾個字段必須被填充。output table fields with ddic referen...
ASP UrlRewrite 使用參考文件
注意 使用urlrewrite 不能開啟 自定義 404錯誤,否則 urlrewrite將無法正常工作 isapi rewrite利用正規表示式進行替換規則的表示。您需要在您 根目錄 建立乙個 httpd.ini 的配置檔案,裡面有urlrewrite配置資訊.以下是httpd.ini 的內容 ht...