成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

本文講解的是Qt學(xué)習(xí)之路Chapter,以對話框為實例對象,請看內(nèi)容。

創(chuàng)建對話框

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

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

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

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

signal和slot

一個signal可以連接多個slot

多個signal可以連接一個slot

一個signal可以連接另一個signal

// 當(dāng)***個信號發(fā)出的時候, 就會發(fā)出第二個信號

  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ù)則會拋棄.

在connect中, 參數(shù)不要寫出名稱, 只需寫出類型即可.

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

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

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

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

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

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

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

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

將子widget放入layout中

設(shè)置tab次序

建立signal-slot連接

實現(xiàn)對話框自定義slot

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

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

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

QRegExpValidator 可以設(shè)置其父對象, 這樣就無需擔(dān)心刪除問題, 因為父對象的刪除就必然要刪除其子對象, 并在屏幕刪除該對象

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

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

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

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

最常用的變形對話框為擴(kuò)展對話框和多頁面對話框.

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

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

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

#p#

多頁面對話框

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

動態(tài)對話框

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

我們可以在運(yùn)行期間使用QUiLoader類加載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>()訪問該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 位于特定的庫里, 需要增加配置: CONFIG += uitools

內(nèi)置的widget和對話框類

按鈕: QPushButton, QToolButton, QCheckBox, QRadioButton

單頁容器: QGroupBox, QFrame

多頁容器: QTabWidget, QToolBox

顯示條目: QListView, QTreeView, QTabView

顯示: QLabel, QLCDNumber, QProgress, QTextBrowser

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

反饋對話框: QInputDialog, QProgressDialog, QMessageBox, QErrorMessage

顏色和字體對話框: QColorDialog, QFontDialog

文件和打印對話框: QPageSetupDialog, QFileDialog, QPrintDialog

滾動條QScrollBar的基類為 QAbstractScrollArea

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

QLabel支持純文本, HTML, 圖像

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

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

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

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

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

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

2011-06-17 10:19:11

Qt QWidge QSetting

2011-07-05 18:40:19

QT 信號 機(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-02 13:24:39

QT Linux

2011-07-05 13:32:45

QT Mysql 驅(qū)動

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 文件

2011-09-09 17:24:39

Qt Webkit模塊

2011-09-01 16:01:25

Qt插件

2011-06-27 13:49:43

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

2011-06-30 16:08:05

Qt 字庫 QPF

2018-04-20 12:12:18

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

2016-12-15 21:15:58

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

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

主站蜘蛛池模板: 大香网伊人 | 亚洲欧美一区二区三区在线 | 国产传媒毛片精品视频第一次 | 欧美激情免费在线 | 国产成人免费视频网站视频社区 | 一级二级三级在线观看 | 精品国产一二三区 | 成人免费视频播放 | 日本精品久久久久 | 欧美激情国产精品 | 成人在线播放 | 久久国产综合 | 国产福利视频网站 | 亚洲国产日韩一区 | 精品国产91亚洲一区二区三区www | 精品国产一区二区三区在线观看 | 中国91av| 一级高清视频 | 天天综合网91 | 亚洲欧美激情精品一区二区 | 婷婷成人在线 | 亚洲国产精品一区 | 在线一区视频 | 国产精品18hdxxxⅹ在线 | 精品久久电影 | 精品九九| 亚洲免费婷婷 | 日韩中文字幕在线观看 | 波多野结衣中文视频 | 狠狠操天天操 | 在线观看成人 | 日韩淫片免费看 | 黄免费在线 | 青青草原综合久久大伊人精品 | 久久精彩视频 | www.日本在线播放 | 国产二区视频 | 56pao在线| 超碰97免费 | 九九综合 | 日韩免费视频一区二区 |