偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

詳解 QT 主要類 QWidget

移動開發(fā)
QWidget類是所有用戶界面對象的基類,每一個窗口部件都是矩形,并且它們按Z軸順序排列的。一個窗口部件可以被它的父窗口部件或者它前面的窗口部件蓋住一部分。 先來看內(nèi)容。

QT 主要類 QWidget 是本文介紹的內(nèi)容,QWidget類是所有用戶界面對象的基窗口部件是用戶界面的一個原子:它從窗口系統(tǒng)接收鼠標、鍵盤和其它事件,并且在屏幕上繪制自己的表現(xiàn)。每一個窗口部件都是矩形,并且它們按Z軸順序排列的。一個窗口部件可以被它的父窗口部件或者它前面的窗口部件蓋住一部分。

每一個窗口部件構(gòu)造函數(shù)接受兩個或三個標準參數(shù):

QWidget *parent = 0是新窗口部件的父窗口部件。如果為0(默認),新的窗口部件將是一個***窗口部件。如果不是,它將會使parent的一個孩子,并且被parent的幾何形狀所強迫(除非你指定WType_TopLevel作為窗口部件標記)。
const char *name = 0是新窗口部件的窗口部件名稱。你可以使用name()來訪問它。窗口部件名稱很少被程序員用到,但是對于圖形用戶界面構(gòu)造程序,比如Qt設(shè)計器,是相當重要的(你可以在Qt設(shè)計器中命名一個窗口部件,并且在你的代碼中使用這個名字來連接它)。dumpObjectTree()調(diào)試函數(shù)也使用它。
WFlags f = 0(在可用的情況下)設(shè)置窗口部件標記,默認設(shè)置對于幾乎所有窗口部件都是適用的,但是,舉例來說,一個沒有窗口系統(tǒng)框架的***窗口部件,你必須使用特定的標記。

你自己將需要為你的窗口部件提供內(nèi)容,但是這里是一些簡要的運行事件,從最普通的開始:

paintEvent() - 只要窗口部件需要被重繪就被調(diào)用。每個要顯示輸出的窗口部件必須實現(xiàn)它并且不在paintEvent()之外在屏幕上繪制是明智的。

resizeEvent() - 當窗口部件被重新定義大小時被調(diào)用。

mousePressEvent() - 當鼠標鍵被按下時被調(diào)用。有六個鼠標相關(guān)事件,但是鼠標按下和鼠標釋放事件是到目前為止最重要的。當鼠標在窗口部件內(nèi)或者當它使用grabMouse()來捕獲鼠標時,它接收鼠標按下事件。

mouseReleaseEvent() - 當鼠標鍵被釋放時被調(diào)用。當窗口部件已經(jīng)接收相應(yīng)的鼠標按下事件時,它接收鼠標釋放事件。這也就是說如果用戶在你的窗口部件內(nèi)按下鼠標,然后拖著鼠標到其它某個地方,然后釋放,你的窗口部件接收這個釋放事件。這里有一個例外:如果出現(xiàn)在彈出菜單中,當鼠標鍵被按下時,這個彈出菜單立即會偷掉這個鼠標事件。

mouseDoubleClickEvent() - 和它看起來也許不太一樣。如果用戶雙擊,窗口部件接收一個鼠標按下事件(如果他們沒有拿牢鼠標,也許會出現(xiàn)一個或兩個鼠標移動事件)、一個鼠標釋放事件并且最終是這個事件。直到你看到第二次點擊是否到來之前,不能從一個雙擊中辨別一個點擊。(這是為什么絕大多數(shù)圖形用戶界面圖書建議雙擊是單擊的一個擴展,而不是一個不同行為的觸發(fā)的一個原因。)

如果你的窗口部件僅僅包含子窗口部件,你也許不需要實現(xiàn)任何一個事件處理器。如果你想檢測在子窗口部件中的鼠標點擊,請在父窗口部件的mousePressEvent()中調(diào)用子窗口部件的hasMouse()函數(shù)。

接收鍵盤的窗口部件需要重新實現(xiàn)一些更多的事件處理器:(詳見http://www.qtopia.org.cn/doc/qiliang.net/qt/qwidget.html#details )

QTime類提供了時鐘時間功能。

QTime對象包含時鐘時間,比如從午夜開始的時、分、秒和毫秒數(shù)。它可以從系統(tǒng)時鐘中讀取當前的時間并且度量時間的跨度。它提供比較時間和操作時間的函數(shù),比如加上一定的秒或毫秒。

QTime操作的是24小時時鐘格式,它沒有AM/PM概念。它操作的是本地時間,它不知道有關(guān)時區(qū)或白天時間的概念。

QTime對象通??梢杂擅靼椎亟o定的時、分、秒和毫秒數(shù)字來創(chuàng)建,或者使用靜態(tài)函數(shù)currentTime()讓QTime對象包含系統(tǒng)時鐘時間。注意精確性取決于下面操作系統(tǒng)的精確性,不是所有的操作系統(tǒng)都有毫秒級精確度的。

hour()、minute()、second()和msec()函數(shù)提供了對時、分、秒和毫秒數(shù)字的訪問。toString()提供了文本格式的相同信息。

一個給定時間之后給定的秒或毫秒數(shù)的時間可以使用addSecs()或addMSecs()得到。相對地,兩個時間的秒(或毫秒)數(shù)可以使用secsTo()或msecsTo()得到。

QTime可以使用start()、restart()和elapsed()函數(shù)度量流逝的時間。

  1. QTime QTime::currentTime () [靜態(tài)]  

返回當前時間,來自于系統(tǒng)時鐘。

QTimer類提供了定時器信號和單觸發(fā)定時器。

它在內(nèi)部使用定時器事件來提供更通用的定時器。QTimer很容易使用:創(chuàng)建一個QTimer,使用start()來開始并且把它的timeout()連接到適當?shù)牟?。當這段時間過去了,它將會發(fā)射timeout()信號。

注意當QTimer的父對象被銷毀時,它也會被自動銷毀。

實例:

  1. QTimer *timer = new QTimer( myObject );          
  2. connect( timer, SIGNAL(timeout()), myObject, SLOT(timerDone()) );          
  3. timer->start( 2000, TRUE ); // 2秒單觸發(fā)定時器   

你也可以使用靜態(tài)的singleShot()函數(shù)來創(chuàng)建單觸發(fā)定時器。

作為一個特殊情況,一旦窗口系統(tǒng)事件隊列中的所有事件都已經(jīng)被處理完,一個定時為0的QTimer就會到時間了。

這也可以用來當提供迅速的用戶界面時來做比較繁重的工作。

  1. QTimer *t = new QTimer( myObject );          
  2. connect( t, SIGNAL(timeout()), SLOT(processOneThing()) );          
  3. t->start( 0, FALSE );      
  4. myObject->processOneThing() 

將會被重復(fù)調(diào)用并且應(yīng)該很快返回(通常在處理一個數(shù)據(jù)項之后),這樣Qt可以把事件傳送給窗口部件并且一旦它完成這個工作就停止這個定時器。這是在圖形用戶界面應(yīng)用程序中實現(xiàn)繁重的工作的一個典型方法,現(xiàn)在多線程可以在越來越多的平臺上使用,并且我們希望無效事件最終被線程替代。

注意QTimer的精確度依賴于底下的操作系統(tǒng)和硬件。絕大多數(shù)平臺支持20毫秒的精確度,一些平臺可以提供更高的。如果Qt不能傳送定時器觸發(fā)所要求的數(shù)量,它將會默默地拋棄一些。

另一個使用QTimer的方法是為你的對象調(diào)用QObject::startTimer()和在你的類中(當然必須繼承QObject)重新實現(xiàn)QObject::timerEvent()事件處理器。缺點是timerEvent()不支持像單觸發(fā)定時器或信號那樣的高級水平。

一些操作系統(tǒng)限制可能用到的定時器的數(shù)量,Qt會盡力在限制范圍內(nèi)工作。

QButton類是按鈕窗口部件的抽象基類,提供了按鈕所共有的功能。

如果你想創(chuàng)建一個按鈕,請使用QPushButton。 http://www.qtopia.org.cn/doc/qiliang.net/qt/qbutton.html

QButton類實現(xiàn)了一個抽象按鈕,并且讓它的子類來指定如何回復(fù)用戶的行為和如何畫按鈕。

QButton提供了推動和切換按鈕。QRadioButton和QCheckBox類只提供了切換按鈕,QPushButton和QToolButton提供了切換按鈕和推動按鈕。

任何按鈕都可以有一個文本的或者像素映射的標簽。setText()設(shè)置按鈕為一個文本按鈕并且setPixmap()設(shè)置它為一個像素映射按鈕。文本/像素映射的使用中需要創(chuàng)建當按鈕被取消使用時所需的“失效的”外觀。

QButton提供了按鈕所要用到的絕大多數(shù)狀態(tài):

isDown()決定按鈕是否被按下。

isOn()決定按鈕是否是開的。只有切換按鈕才能被切換為開或關(guān)(請看下面)。
isEnabled()決定按鈕是否可以被用戶按下。

setAutoRepeat()決定如果用戶按下按鈕,按鈕是否可以自動回復(fù)。

setToggleButton()決定按鈕是否是一個切換按鈕。

isDown()和isOn()的不同點如下:當用戶點擊一個切換按鈕并且把它切換為開,按鈕首先被按下并且然后被釋放變?yōu)殚_狀態(tài)。當用戶再次點擊(切換為關(guān)),按鈕首先移動到被按下狀態(tài),然后變?yōu)殛P(guān)狀態(tài)(isOn()和isDown()都為假)。

默認按鈕(在很多對話框中被使用的)由QPushButton::setDefault()和QPushButton::setAutoDefault()提供。

QButton提供五個信號:

當鼠標光標在按鈕內(nèi),鼠標左鍵被按下時,pressed()被發(fā)送。

當鼠標左鍵被釋放時,released()被發(fā)送。

當按鈕首先被按下然后又被釋放或者快捷鍵被按下,或者當animateClick()被調(diào)用時,clicked()被發(fā)送。

當切換按鈕的狀態(tài)變化時,toggled(bool)被發(fā)送。

當一個三態(tài)切換按鈕的狀態(tài)變化時,stateChanged(int)被發(fā)送。

如果一個文本按鈕的文本中有“&”,QButton會創(chuàng)建一個自動快捷鍵。下面的代碼創(chuàng)建一個標簽為“Rock & Roll”(c下面有下劃線)的推動按鈕。這個按鈕有一個自動快捷鍵,Alt+C:

QPushButton *p = new QPushButton( "Ro&ck && Roll", this );  在這個實例中,當用戶按下Alt+C時,按鈕將會調(diào)用animateClick()。

你也可以使用setAccel()函數(shù)來設(shè)置一個定制的快捷鍵。這個對于絕大多數(shù)像素映射按鈕是很有用的,因為它們沒有自動快捷鍵。

QPushButton *p;    p->setPixmap( QPixmap("print.png") );    p->setAccel( ALT+Key_F7 );  Qt所提供的所有按鈕(QPushButton、QToolButton、QCheckBox和QRadioButton)都能夠既顯示文本也顯示像素映射。

為了繼承QButton,你至少不得不重新實現(xiàn)drawButton()(繪制按鈕的外形)和drawButtonLabel()(繪制它的文本或像素映射)。通常也被建議重新實現(xiàn)sizeHint(),并且有時也被建議重新實現(xiàn)hitButton()(為了決定一個按鈕按下是否在按鈕內(nèi))。

為了減少閃爍,QButton::paintEvent()設(shè)置drawButton()中所要畫的一個像素映射。你不用在QButton的子類中重新實現(xiàn)paintEvent(),除非你想接管全部的繪制工作。

小結(jié):關(guān)于詳解 QT 主要類 QWidget 的內(nèi)容介紹完了,希望本文對你有所幫助!

責(zé)任編輯:zhaolei 來源: CSDN博客
相關(guān)推薦

2011-06-16 11:13:13

QtQWidget

2011-06-28 11:05:19

Qt QWidget Eventable

2011-06-24 15:06:40

QT

2011-06-24 14:17:58

Qt 容器類 QVector

2011-03-18 19:37:38

Eventable接口QtWidget

2011-06-16 11:28:48

Qt QApplicati

2011-06-15 17:28:23

Qt 多視圖 架構(gòu)

2011-06-24 10:05:51

QT 對象 父對象

2011-06-20 17:33:58

Qt MeegoTouch Maemo

2011-06-28 15:01:01

Qt PIMPL

2011-06-21 18:02:14

Qt 動態(tài) 鏈接庫

2011-06-23 14:05:32

Qt 事件機制

2011-06-14 15:45:02

Qt Object

2024-12-11 13:14:27

2011-08-16 19:27:53

ORACLE GOLD

2011-06-24 10:54:34

Qt Mysql

2011-06-17 10:19:11

Qt QWidge QSetting

2011-06-17 09:58:26

Qt Chapter QObject

2011-06-24 12:58:49

Qt LineEdit

2011-07-04 17:18:23

Qt SQLite 數(shù)據(jù)庫
點贊
收藏

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