自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Qt教程 使用窗口部件 (4)

移動(dòng)開發(fā)
這個(gè)教程介紹了使用Qt工具包進(jìn)行圖形用戶界面編程。它沒有包括所有的東西:強(qiáng)調(diào)的是教授一種圖形用戶界面編程的編程思想,并且介紹Qt的特征也是必需的。一些通常情況下使用的特征在這個(gè)教程里沒有用到。

繼續(xù)Qt教程第三章的講解,本文章這個(gè)例子顯示了如何創(chuàng)建一個(gè)你自己的窗口部件,描述如何控制一個(gè)窗口部件的最小大小和***大小,并且介紹了窗口部件的名稱。

  1. #include <qapplication.h> 
  2. #include <qpushbutton.h> 
  3. #include <qfont.h> 
  4. class MyWidget : public QWidget  
  5. {  
  6. public:  
  7.     MyWidget( QWidget *parent=0, const char *name=0 );  
  8. };  
  9. MyWidget::MyWidget( QWidget *parent, const char *name )  
  10.         : QWidget( parent, name )  
  11. {  
  12.     setMinimumSize( 200, 120 );  
  13.     setMaximumSize( 200, 120 );  
  14.     QPushButton *quit = new QPushButton( "Quit", this, "quit" );  
  15.     quit->setGeometry( 62, 40, 75, 30 );  
  16.     quit->setFont( QFont( "Times", 18, QFont::Bold ) );  
  17.     connect( quit, SIGNAL(clicked()), qApp, SLOT(quit()) );  
  18. }  
  19. int main( int argc, char **argv )  
  20. {  
  21.     QApplication a( argc, argv );  
  22.  
  23.     MyWidget w;  
  24.     w.setGeometry( 100, 100, 200, 120 );  
  25.     a.setMainWidget( &w );  
  26.     w.show();  
  27.     return a.exec();  

解說

  1. class MyWidget : public QWidget  
  2.    {  
  3.    public:  
  4.        MyWidget( QWidget *parent=0, const char *name=0 );  
  5.    }; 

這里我們創(chuàng)建了一個(gè)新類。因?yàn)檫@個(gè)類繼承了QWidget,所以新類是一個(gè)窗口部件,并且可以最為一個(gè)頂層窗口或者子窗口部件(像第三章里面的按鈕)。

這個(gè)類只有一個(gè)成員函數(shù),構(gòu)造函數(shù)(加上從QWidget繼承來的成員函數(shù))。這個(gè)構(gòu)造函數(shù)是一個(gè)標(biāo)準(zhǔn)的Qt窗口部件構(gòu)造函數(shù),當(dāng)你創(chuàng)建窗口部件時(shí),你應(yīng)該總是包含一個(gè)相似的構(gòu)造函數(shù)。

***個(gè)參數(shù)是它的父窗口部件。為了生成一個(gè)頂層窗口,你指定一個(gè)空指針作為父窗口部件。就像你看到的那樣,這個(gè)窗口部件默認(rèn)地被認(rèn)做是一個(gè)頂層窗口。

第二個(gè)參數(shù)是這個(gè)窗口部件的名稱。這個(gè)不是顯示在窗口標(biāo)題欄或者按鈕上的文本。這只是分配給窗口部件的一個(gè)名稱,以后可以用來查找這個(gè)窗口部件,并且這里還有一個(gè)方便的調(diào)試功能可以完整地列出窗口部件層次。

  1. MyWidget::MyWidget( QWidget *parent, const char *name )  
  2.  : QWidget( parent, name ) 

構(gòu)造函數(shù)的實(shí)現(xiàn)從這里開始。像大多數(shù)窗口部件一樣,它把parent和name傳遞給了QWidget的構(gòu)造函數(shù)。 

  1. {  
  2.       setMinimumSize( 200, 120 );  
  3.       setMaximumSize( 200, 120 ); 

因?yàn)檫@個(gè)窗口部件不知道如何處理重新定義大小,我們把它的最小大小和***大小設(shè)置為相等的值,這樣我們就確定了它的大小。在下一章,我們將演示窗口部件如何響應(yīng)用戶的重新定義大小事件。

  1. QPushButton *quit = new QPushButton( "Quit", this, "quit" );  
  2.         quit->setGeometry( 62, 40, 75, 30 );  
  3.         quit->setFont( QFont( "Times", 18, QFont::Bold ) ); 

這里我們創(chuàng)建并設(shè)置了這個(gè)窗口部件的一個(gè)名稱為“quit”的子窗口部件(新窗口部件的父窗口部件是this)。這個(gè)窗口部件名稱和按鈕文本沒有關(guān)系,只是在這一情況下碰巧相似。

注意quit是這個(gè)構(gòu)造函數(shù)中的局部變量。MyWidget不能跟蹤它,但Qt可以,當(dāng)MyWidget被刪除的時(shí) 候,默認(rèn)地它也會(huì)被刪除。這就是為什么MyWidget不需要一個(gè)析構(gòu)函數(shù)的原因。(另外一方面,如果你選擇刪除一個(gè)子窗口部件,也沒什么壞處,這個(gè)子窗 口部件會(huì)自動(dòng)告訴Qt它即將死亡。)

  1. setGeometry()調(diào)用和上一章的move()和resize()是一樣的。   
  2.         connect( quit, SIGNAL(clicked()), qApp, SLOT(quit()) );  
  3.     } 

因?yàn)镸yWidget類不知道這個(gè)應(yīng)用程序?qū)ο?,它不得不連接到Qt的指針,qApp。

一個(gè)窗口部件就是一個(gè)軟件組件并且它應(yīng)該盡量少地知道關(guān)于它的環(huán)境,因?yàn)樗鼞?yīng)該盡可能的通用和可重用。

知道了應(yīng)用程序的名稱將會(huì)打破上述原則,所以在一個(gè)組件,比如MyWidget,需要和應(yīng)用程序?qū)ο髮υ挼倪@種情況下,Qt提供了一個(gè)別名,qApp。

  1. int main( int argc, char **argv )  
  2.   {  
  3.       QApplication a( argc, argv );  
  4.       MyWidget w;  
  5.       w.setGeometry( 100, 100, 200, 120 );  
  6.       a.setMainWidget( &w );  
  7.       w.show();  
  8.       return a.exec();  
  9.   } 

這里我們舉例說明了我們的新子窗口部件,把它設(shè)置為主窗口部件,并且執(zhí)行這個(gè)應(yīng)用程序。

行為

這個(gè)程序和上一章的在行為上非常相似。不同點(diǎn)是我們實(shí)現(xiàn)的方式。無論如何它的行為還是有一些小差別。試試改變它的大小,你會(huì)看到什么?

【編輯推薦】

用Qt為Symbian開發(fā)應(yīng)用程序

QML教程:Qt-Quick六大開源組件

QML教程:構(gòu)建和安裝QtComponents

開源軟件是基于JVM 平臺之Qt移植QtJambi

Qt開發(fā)者系列之一:來自瑞典的QML狂熱愛好者

責(zé)任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2011-07-04 16:20:54

QT 窗口 QWidget

2011-06-22 10:27:32

QT 鍵盤 焦點(diǎn)

2011-07-04 16:12:00

QT QWidget

2011-06-16 11:13:13

QtQWidget

2011-07-04 16:31:24

QT 部件

2011-05-11 17:48:31

CocoaiOS

2011-06-20 15:52:14

Qt Designer 控件

2010-05-13 10:45:38

2011-06-20 16:38:33

Qt QWidget Qt4.5

2021-02-23 13:27:28

Android 12谷歌小部件

2011-06-13 11:07:22

QT 移植

2023-12-11 07:41:30

PyQt6Python用對象樹管理窗口

2011-07-04 11:21:59

QT Designer

2011-08-03 14:06:30

Xcode 4 安裝

2011-06-21 09:46:49

Qt 半透明 嵌入

2011-06-08 14:55:37

Qt 教程

2011-06-27 16:07:49

Qt Designer

2011-06-24 10:54:34

Qt Mysql

2011-06-08 15:06:09

Qt 教程

2011-08-30 15:32:08

QtQuickQML
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號