成人免费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)用程序員在運行時期得到關(guān)于QObject派生類的"meta-information", 其包含該對象支持的signals和slots列表以及類名稱. 該機制支持屬性(Designer擴展的)和文本翻譯(國際化), 并且為QtScript模塊的基礎(chǔ), 可動態(tài)添加屬性.

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

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); 

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

相同的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文件在運行期間創(chuàng)建的對話框. 而不是用.ui文件生成的C++代碼創(chuàng)建的對話框.

我們可以在運行期間使用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 信號 機制

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-30 16:08:05

Qt 字庫 QPF

2011-06-27 13:49:43

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

2018-04-20 12:12:18

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

2016-12-15 21:15:58

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

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

主站蜘蛛池模板: 日韩欧美福利视频 | 免费二区| 成人国产精品久久 | 国产精品美女久久久久久久久久久 | 日本不卡免费新一二三区 | 国产日产欧产精品精品推荐蛮挑 | 中国大陆高清aⅴ毛片 | 亚洲高清在线视频 | 国产精品久久精品 | 国产精品69毛片高清亚洲 | 欧美日韩久久久 | 欧美成人一级 | 久久亚洲精品国产精品紫薇 | 久久久久久国产精品免费免费男同 | 中文字幕免费在线 | 国产99在线 | 欧美 | 亚洲成人精品久久久 | 一级二级三级在线观看 | 欧美456| 在线观看视频福利 | 放个毛片看看 | 久久久久国 | 亚洲精品一区二区三区免 | 精品久久ai电影 | 亚洲精品中文字幕中文字幕 | 日日操av | 国产精品久久久久不卡 | www..com18午夜观看 | 免费黄色特级片 | 日韩欧美三级电影在线观看 | 成人国产一区二区三区精品麻豆 | 亚洲国产伊人 | 中文字幕av一区 | 国产一级片一区二区三区 | 精品欧美乱码久久久久久1区2区 | 欧美激情一区二区 | 搞黄视频免费看 | 国产精品a一区二区三区网址 | 国产精品美女久久久久久免费 | 免费成年网站 | 九九热国产视频 |