欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

目錄

柚子快報(bào)邀請(qǐng)碼778899分享:開(kāi)發(fā)語(yǔ)言 Qt-自定義代理

柚子快報(bào)邀請(qǐng)碼778899分享:開(kāi)發(fā)語(yǔ)言 Qt-自定義代理

http://yzkb.51969.com/

? ? ? ? 在模型/視圖結(jié)構(gòu)中,代理的作用就是在視圖組件進(jìn)入編輯狀態(tài)編輯某個(gè)項(xiàng)時(shí),提供一個(gè)臨時(shí)的編輯器用于數(shù)據(jù)編輯,編輯完成后再把數(shù)據(jù)提交給數(shù)據(jù)模型,例如,在QTableView組件上雙擊一個(gè)單元格時(shí),代理會(huì)提供一個(gè)臨時(shí)的編輯器,默認(rèn)是QLineEdit編輯框,在這個(gè)編輯框里修改項(xiàng)的文字,按Enter鍵或者焦點(diǎn)移動(dòng)到其他單元格時(shí)完成編輯,編輯框內(nèi)的文字會(huì)保存到數(shù)據(jù)模型,當(dāng)我想要改變默認(rèn)的代理時(shí),就需要自己自定義代理。

自定義代理的功能

? ? ? ? 若要替換默認(rèn)代理組件,就需要為QTableView組件的某列或者某個(gè)單元格設(shè)置自定義代理,自定義代理需要從QStyledItemDelegate類繼承,創(chuàng)建自定義代理類的實(shí)例后,再將其設(shè)置為整個(gè)視圖組件或者視圖組件的某行某列的代理,以替代默認(rèn)代理的功能。

QAbstractItemView 類定義了設(shè)置自定義代理類的3個(gè)函數(shù),函數(shù)定義如下:

void setItemDelegate(QAbstractItemDelegate* delegate)

void setItemDelegateForColumn(int column,QAbstractItemDelegate* delegate)

void setItemDelegateForRow(int Row,QAbstractItemDelegate* delegate)

? ? ? ? 其中,delegate是創(chuàng)建的自定義代理類的實(shí)例對(duì)象。函數(shù)setItemDelegate()將delegate設(shè)置為整個(gè)視圖組件的代理,函數(shù)setItemDelegateForColumn()為視圖組件的某一列設(shè)置自定義代理,函數(shù)setItemDelegateForRow()為視圖組件的某一行設(shè)置自定義代理,QStyledItemDelegate是視圖組件使用的默認(rèn)的代理類,自定義代理類需要從QStyledItemDelegate列繼承

QStyledItemDelegate類

????????QStyledItemDelegate是視圖組件使用的默認(rèn)的代理類,一般使用QStyledItemDelegate作為自定義代理類的父類,要自定義一個(gè)代理類,必須重新實(shí)現(xiàn)QStyledItemDelegate中定義的4個(gè)虛函數(shù),這4個(gè)函數(shù)是由模型/視圖系統(tǒng)自動(dòng)調(diào)用的

1,函數(shù)createEditor()

????????函數(shù)createEditor()可創(chuàng)建用于編輯模型數(shù)據(jù)的界面組件,被稱為代理編輯器,例如QSpinBox組件,或QComboBox組件,其函數(shù)原型定義如下

QWidget* QStyledItemDelegate::createEditor(QWidget* parent,const QStyleOptionViewItem &option,const QModelIndex &index)

? ? ? ? 其中parent是要?jiǎng)?chuàng)建的組件的父組件,一般就是窗口對(duì)象,option是項(xiàng)的一些顯示選項(xiàng),是QStyleOptionViewItem類型的,包含字體,對(duì)齊方式,背景色等屬性,index是項(xiàng)在數(shù)據(jù)模型中的模型索引,通過(guò)index->model()可以獲取項(xiàng)所屬數(shù)據(jù)模型的對(duì)象指針。在QTableView視圖組件上雙擊一個(gè)單元格使其進(jìn)入編輯狀態(tài)時(shí),系統(tǒng)就會(huì)自動(dòng)調(diào)用createEditor()創(chuàng)建代理編輯器

2,函數(shù)setEditorData()

? ? ? ? 函數(shù)setEditorData()的功能是從數(shù)據(jù)模型獲取某一個(gè)項(xiàng)的角色(一般是EditRole 角色)數(shù)據(jù),然后將其設(shè)置為代理編輯器上顯示的數(shù)據(jù),其函數(shù)原型如下

void QStyledItemDelegate::setEditorData (QWidegt* editor , const QModelIndex &index)

? ? ? ? 參數(shù)editor就是前面用函數(shù)createEditor()創(chuàng)建的代理編輯器,通過(guò)index->model()可以獲取項(xiàng)所屬數(shù)據(jù)模型的對(duì)象指針,從而獲取項(xiàng)的數(shù)據(jù),然后將其顯示在代理編輯器上。

3,函數(shù)setModelData()

? ? ? ? 完成對(duì)當(dāng)前單元格的編輯,例如輸入焦點(diǎn)到其他單元格時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)用函數(shù)setModelData(),其功能是將代理編輯器里的輸入數(shù)據(jù)保存到數(shù)據(jù)模型的項(xiàng)里,其函數(shù)原型定義如下

void QStyledItemDelegate::setModelData(QWidget* editor,QAbstractItemModel &model,const QModelIndex &index)

? ? ? ? 其中editor是代理編輯器,model是數(shù)據(jù)模型,index是所編輯的項(xiàng)在模型中的模型索引。

4,函數(shù)updateEditorGepmetry()

????????視圖組件在界面上顯示代理編輯器時(shí),需要調(diào)用updateEditorGepmetry()函數(shù)為組件設(shè)置合適的大小,其函數(shù)原型定義如下

void QStyledItemDelegate::updateEditorGepmetry(QWidget* editor,const? QStyleOptionViewItem &option,const QModelIndex &index)

? ? ? ? 其中變量option->rect是QRect類型,表示代理編輯器的建議大小,一般將代理編輯器大小設(shè)置為建議大小即可,即用下面的一行代碼,

void setGeometry(option,rect);

柚子快報(bào)邀請(qǐng)碼778899分享:開(kāi)發(fā)語(yǔ)言 Qt-自定義代理

http://yzkb.51969.com/

相關(guān)鏈接

評(píng)論可見(jiàn),查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19367111.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問(wèn)

文章目錄