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

Qt學(xué)習(xí)之路 詳解 下篇

移動(dòng)開(kāi)發(fā)
本文介紹的是創(chuàng)建對(duì)話(huà)框的例子,類(lèi)中Q_OBJECT 宏表示要定義singnal和slot, signal和slot都是宏,Qt::CaseSensitivity 為枚舉類(lèi)型, 可取值Qt::CaseSensitive 和 Qt::CaseInsensitive, 表示匹配的靈敏度。

本文講解的是Qt學(xué)習(xí)之路Chapter,以對(duì)話(huà)框?yàn)閷?shí)例對(duì)象,請(qǐng)看內(nèi)容。

創(chuàng)建對(duì)話(huà)框

程序一般用于設(shè)置程序的選項(xiàng)和選擇.

類(lèi)中Q_OBJECT 宏表示要定義singnal和slot, signal和slot都是宏,Qt::CaseSensitivity 為枚舉類(lèi)型, 可取值Qt::CaseSensitive 和 Qt::CaseInsensitive, 表示匹配的靈敏度。

Qt最重要的模塊為 QtCore, QtGui, QtNetwork, QtOpenGL, QtScript, QtSql, QtSvg, QtXml,在比較大的程序中, 頭文件中包含其他的大頭文件, 不是合適的做法, 所以在頭文件中不要include QtGui ,tr 函數(shù)可以用于轉(zhuǎn)換該字符串至其他語(yǔ)言. label文本中的快捷鍵如&w,則按下alt+w則該label的buddy widget獲得焦點(diǎn).

addStretch 就像在該處增加了彈簧一樣顯示空白,slot和普通的C++成員函數(shù)相同, 可以是虛擬的, 可以被重載, 可以為公有, 保護(hù)或者私有函數(shù). 可以直接調(diào)用該函數(shù). 參數(shù)可以為任何類(lèi)型. ***不同的就是當(dāng)信號(hào)發(fā)出的時(shí)候就會(huì)自動(dòng)調(diào)用該slot函數(shù)

signal和slot

一個(gè)signal可以連接多個(gè)slot

多個(gè)signal可以連接一個(gè)slot

一個(gè)signal可以連接另一個(gè)signal

// 當(dāng)***個(gè)信號(hào)發(fā)出的時(shí)候, 就會(huì)發(fā)出第二個(gè)信號(hào)

  1. connect(lineEdit, SIGNAL(textChanged(const QString &)), this, SIGNAL(updateRecord(const QString &))); 

可以移除連接

  1. disconnect(lcd, SIGNAL(overflow()), this, SLOT(handleMathError())); 

signal和slot必須含有相同的參數(shù)和次序. 如果signal的參數(shù)多于slot的參數(shù)數(shù), 多余的參數(shù)則會(huì)拋棄.

在connect中, 參數(shù)不要寫(xiě)出名稱(chēng), 只需寫(xiě)出類(lèi)型即可.

signal和slot在QObject中實(shí)現(xiàn), 不僅僅局限于GUI程序. 可以為任意QObject派生類(lèi)所使用.

Qt的Meta-Object系統(tǒng)

該系統(tǒng)提供了兩個(gè)關(guān)鍵服務(wù): signals-slots 和 introspection(反省), introspection的功能是實(shí)現(xiàn)signals-slots的必要部分. 同時(shí)允許應(yīng)用程序員在運(yùn)行時(shí)期得到關(guān)于QObject派生類(lèi)的"meta-information", 其包含該對(duì)象支持的signals和slots列表以及類(lèi)名稱(chēng). 該機(jī)制支持屬性(Designer擴(kuò)展的)和文本翻譯(國(guó)際化), 并且為QtScript模塊的基礎(chǔ), 可動(dòng)態(tài)添加屬性.

Qt通過(guò)提供分離的工具moc來(lái)實(shí)現(xiàn)該meta-object系統(tǒng). 該機(jī)制的作用如下:

Q_OBJECT宏聲明一些introspection函數(shù), 這些函數(shù)必須在每個(gè)QObject派生類(lèi)中實(shí)現(xiàn): metaObject(), tr(), qt_metacall(),以及其他

moc工具生成Q_OBJECT所聲明函數(shù)和所有信號(hào)的實(shí)現(xiàn)

QObject的成員函數(shù)如connect和disconncet使用這些introspection函數(shù)來(lái)完成工作. 注意避免signal和slot的無(wú)限循環(huán)問(wèn)題,無(wú)論是手寫(xiě)代碼還是用Qt designer, 創(chuàng)建對(duì)話(huà)框都擁有以下相同的基本步驟:

創(chuàng)建和初始化子widget

將子widget放入layout中

設(shè)置tab次序

建立signal-slot連接

實(shí)現(xiàn)對(duì)話(huà)框自定義slot

ui文件生成的c++文件里所生成的UI類(lèi), 聲明了該form所有子widget和layout的成員變量. setupUi()函數(shù)初始化該form.

為了增加一些功能, 創(chuàng)建一個(gè)新類(lèi), 從QDialog和Ui::GoToCellDialog派生. 然后實(shí)現(xiàn)缺省的功能

Qt提供了三個(gè)內(nèi)建的validator類(lèi): QIntValidator , QDoubleValidator , 和 QRegExpValidator

QRegExpValidator 可以設(shè)置其父對(duì)象, 這樣就無(wú)需擔(dān)心刪除問(wèn)題, 因?yàn)楦笇?duì)象的刪除就必然要?jiǎng)h除其子對(duì)象, 并在屏幕刪除該對(duì)象

slot accept()函數(shù)將dialog的返回值設(shè)置為QDialog::Accepted()(等于1). reject則設(shè)置返回值為QDialog::Rejected()(等于0)

QLineEdit::hasAcceptableInput() 用驗(yàn)證器驗(yàn)證輸入內(nèi)容是否符合要求

QDialogButtonBox --- 一個(gè)widget, 含有指定的按鈕并使用正確的方式顯示, 拖動(dòng)Button Box widget至form

  1. buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); 

最常用的變形對(duì)話(huà)框?yàn)閿U(kuò)展對(duì)話(huà)框和多頁(yè)面對(duì)話(huà)框.

相同的widget由于其內(nèi)容不同, 則大小有可能不同, 如需設(shè)置相同大小則需要增加代碼:

  1. primaryColumnCombo->setMinimumSize(secondaryColumnCombo->sizeHint()); 

// secondaryColumnCombo的內(nèi)容為None, 比PrimaryColumnCombo的內(nèi)容要多, 所以重新設(shè)置

#p#

多頁(yè)面對(duì)話(huà)框

  1. QTabWidget --- 提供tab bar控制其內(nèi)置的QStackedWidget   
  2. QListWidget 和 QStackedWidget 配合使用,  
  3. QListWidget的當(dāng)前條目顯示哪個(gè)QStackedWidget顯示   
  4. QListWidget::currentRowChanged() 信號(hào)連至 QStackedWidget::setCurrentIndex() 槽   
  5. QTreeWidget 和 QStackedWidget 類(lèi)似QListWidget  

動(dòng)態(tài)對(duì)話(huà)框

是指用Qt Designer創(chuàng)建的.ui文件在運(yùn)行期間創(chuàng)建的對(duì)話(huà)框. 而不是用.ui文件生成的C++代碼創(chuàng)建的對(duì)話(huà)框.

我們可以在運(yùn)行期間使用QUiLoader類(lèi)加載ui文件

 

  1. view plaincopy to clipboardprint?QUiLoader uiLoader;     
  2. QFile file("sortdialog.ui");    
  3.  QWidget *sortDialog = uiLoader.load(&file);    
  4.  if (sortDialog) {       ...   }  QUiLoader uiLoader;  
  5. QFile file("sortdialog.ui");  
  6. QWidget *sortDialog = uiLoader.load(&file);  
  7. if (sortDialog) {  
  8.  ...  

我們可以使用QObject::findChild<T>()訪問(wèn)該form的子widget

  1. QComboBox *primaryColumnCombo =         
  2. sortDialog->findChild<QComboBox *>("primaryColumnCombo");     
  3. if (primaryColumnCombo) {       ...   }    
  4. QComboBox *primaryColumnCombo =  
  5.  sortDialog->findChild<QComboBox *>("primaryColumnCombo");  
  6. if (primaryColumnCombo) {  
  7.  ...  

QUiLoader 位于特定的庫(kù)里, 需要增加配置: CONFIG += uitools

內(nèi)置的widget和對(duì)話(huà)框類(lèi)

按鈕: QPushButton, QToolButton, QCheckBox, QRadioButton

單頁(yè)容器: QGroupBox, QFrame

多頁(yè)容器: QTabWidget, QToolBox

顯示條目: QListView, QTreeView, QTabView

顯示: QLabel, QLCDNumber, QProgress, QTextBrowser

輸入: QSpinBox, QDoubleSpinBox, QComboBox, QDateEdit, QTimeEdit, QDateTimeEdit, QScrollBar, QSlider, QTextEdit, QLineEdit, QDial

反饋對(duì)話(huà)框: QInputDialog, QProgressDialog, QMessageBox, QErrorMessage

顏色和字體對(duì)話(huà)框: QColorDialog, QFontDialog

文件和打印對(duì)話(huà)框: QPageSetupDialog, QFileDialog, QPrintDialog

滾動(dòng)條QScrollBar的基類(lèi)為 QAbstractScrollArea

Qt提供富文本(rich text), 支持多格式文本

QLabel支持純文本, HTML, 圖像

QTextBrowser為只讀QTextEdit, 可支持帶格式文本, 相對(duì)于QLabel, 可以用于顯示大量的文本內(nèi)容, 提供滾動(dòng)條, 鍵盤(pán)和鼠標(biāo)可以控制瀏覽.

QLineEditor支持validator, QTextEditor為QAbstractScrollArea的派生類(lèi), 可以輸入大量的文本. 可以設(shè)置輸入純文本還是富文本(rich text)

QLineEditor和QTextEditor都和剪貼板相關(guān)聯(lián)。

小結(jié):Qt學(xué)習(xí)之路內(nèi)容介紹完了,里面有很多我們要去學(xué)習(xí)的類(lèi),想要繼續(xù)了解的話(huà), 請(qǐng)參考:

          Qt 學(xué)習(xí)之路 上篇

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

2011-06-17 10:19:11

Qt QWidge QSetting

2011-07-05 18:40:19

QT 信號(hào) 機(jī)制

2011-06-30 10:36:07

QT Graphics View

2011-06-27 10:28:45

Qt 網(wǎng)絡(luò) TCP

2011-06-24 16:50:06

QT 框架 OpenCV

2011-06-23 18:16:59

Qt Qtopia

2011-07-01 14:20:59

Qt 事件

2011-07-02 13:42:24

Qt 移植

2011-07-05 13:32:45

QT Mysql 驅(qū)動(dòng)

2011-07-02 13:24:39

QT Linux

2011-09-07 16:28:46

QT WidgetQWidget

2010-05-18 13:53:34

Subversion插

2011-06-17 17:16:01

Qt Eclipse Linux

2011-06-17 13:39:47

Qt 文件 類(lèi)

2011-09-09 17:24:39

Qt Webkit模塊

2011-09-01 16:01:25

Qt插件

2011-06-27 13:49:43

Qt 數(shù)據(jù)庫(kù) QSqlQueryM

2011-06-30 16:08:05

Qt 字庫(kù) QPF

2018-04-20 12:12:18

數(shù)據(jù)分析可視化數(shù)據(jù)挖掘

2016-12-15 21:15:58

大數(shù)據(jù)
點(diǎn)贊
收藏

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