下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 QListVia的健QStringListModel用于處理字符串列表的數(shù)據(jù)模型,它可以作為QListView的數(shù)據(jù)模型,在界面上顯示和編輯字符串列表。QStringListModel 的setStringList()函數(shù)可以初始化數(shù)據(jù)模型的字符用列表的內(nèi)容,stringList()函數(shù)返回?cái)?shù)據(jù)模型內(nèi)的字符串列表,在關(guān)聯(lián)的ListView 組件里編輯修改數(shù)據(jù)后,數(shù)據(jù)都會(huì)及時(shí)更新到數(shù)據(jù)模型內(nèi)的字符串列 表里。QStringListModel提供編輯和修改字符串列表數(shù)據(jù)的函數(shù),如 insertRows()、removeRows()、setData() 等,這些操作直接影響數(shù)據(jù)模型內(nèi) 部的字符串列
2、表,并且修改后的數(shù)據(jù)會(huì)自動(dòng)在關(guān)聯(lián)的 ListView 組件里刷新顯 示。實(shí)例中采用QStringListModel 作為數(shù)據(jù)模型,QListView組件作為視圖 組件,演示了 QStringListModel 和 QListView 構(gòu)成 Model/View 結(jié)構(gòu)編輯字 符串列表的功能,程序運(yùn)行時(shí)界面如圖 1所示。- XQFlalrjTeKtEclt宿空文本顯示數(shù)據(jù)噢型的占比1甘扎1式北京,海i nser ted te®i天津河北山親匹川重慶廣布河南圖1實(shí)例的運(yùn)行時(shí)界面窗口左側(cè)是對(duì) QStringListModel的一些操作,右側(cè)的 QPlaintextEdit組件顯示 QStri
3、ng ListModel:stringList()的內(nèi)容,以查看其是否與界面上ListView 組件顯示的內(nèi)容一致。QStringListModel 的用法Model/View結(jié)構(gòu)對(duì)象和組件初始化實(shí)例中的窗口是從 QWidget繼承而來的類 Widget ,界面采用可視化設(shè)計(jì) 在Widget類中定義一個(gè)QStringListModel 類的變量:QStringListModel *theModel;在Widget類的構(gòu)造函數(shù)中進(jìn)行變量的創(chuàng)建,完成數(shù)據(jù)模型與界面視圖組 件的關(guān)聯(lián),下面是Widget類構(gòu)造函數(shù)的代碼:Widget 二Widget(QWidget *parent):QWidget(p
4、arent),ui(new Ui:Widget) ui->setupUi(this);QStringList theStrList; 保存初始 StringListtheStrList<<"北京"<<"上海"<<"天津"<<"河北"<<"山東"<<"四川"<<"重慶"<<"廣東"<<"河 南"初始化 St
5、ringListtheModel=new QStringListModel(this); / 創(chuàng)建數(shù)據(jù)模型theModel->setStringList(theStrList); 為模型設(shè)置 StringList ,會(huì)導(dǎo)入 StringList 的內(nèi)容ui->listView->setModel(theModel); / 為 listView 設(shè)置數(shù)據(jù)模型 ui->listView->setEditTriggers(QAbstractItemView:DoubleClicked | QAbstractItemView:SelectedClicked);QStrin
6、gListModel 的setStringList() 函數(shù)將一個(gè)字符串列表的內(nèi)容作 為數(shù)據(jù)模型的初始數(shù)據(jù)內(nèi)容。QListView的setModel()函數(shù)為界面視圖組件設(shè) 置一個(gè)數(shù)據(jù)模型。程序運(yùn)行后,界面上ListView 組件里就會(huì)顯示初始化的字符串列表的內(nèi)容。編輯、添加、刪除項(xiàng)的操作1)編輯項(xiàng)QListView:setEditTriggers() 函數(shù)設(shè)置 QListView 的條目是否可以編輯, 以及如何進(jìn)入編輯狀態(tài),函數(shù)的參數(shù)是 QAbstractItemView:EditTrigger 枚 舉類型值的組合。構(gòu)造函數(shù)中設(shè)置為:ui->listView->setEditTr
7、iggers(QAbstractItemView二DoubleClicked |QAbstractItemView二SelectedClicked);表示在雙擊,或選擇并單擊列表項(xiàng)后,就進(jìn)入編輯狀態(tài)。 若要設(shè)置為不可編輯,則可以設(shè)置為:ui->listView->setEditTriggers(QAbstractItemView二 NoEditTriggers);2)添加項(xiàng)添加項(xiàng)是要在列表的最后添加一行,界面上“添加項(xiàng)”按鈕的槽函數(shù)代碼如下:void Widget:on_btnListAppend_clicked() 添加一行theModel->insertRow(theMo
8、del->rowCount(); / 在尾部插入一空行 /QModelIndex index;QModelIndex index=theModel->index(theModel->rowCount()-1,0);獲取最后一行theModel->setData(index,"new item",Qt:DisplayRole);/ 設(shè)置顯示文字 ui->listView->setCurrentIndex(index); 設(shè)置當(dāng)前選中的行對(duì)數(shù)據(jù)的操作都是針對(duì)數(shù)據(jù)模型的,所以,插入一行使用的是QStringListModel 的 insertR
9、ow (int row) 函數(shù),其中 row 是一個(gè)行號(hào),表 示在row行之前插入一行。要在列表的最后插入一行,參數(shù) row設(shè)置為列表 當(dāng)前的行數(shù)即可。這樣只是在列表尾部添加一個(gè)空行,沒有任何文字。為了給 添加的項(xiàng)設(shè)置一個(gè)缺省的文字標(biāo)題,首先要獲得新增項(xiàng)的模型索引,即:QModellndex index=theModel->index (theModel->rowCount () -1,0);QStringListModel 的index()函數(shù)根據(jù)傳遞的行號(hào)、列號(hào)、父項(xiàng)的模型索引生成一個(gè)模型索引,這行代碼為新增的最后一個(gè)項(xiàng)生成一個(gè)模型索引 index。為新增的項(xiàng)設(shè)置一個(gè)文字標(biāo)題“
10、 new item ",使用setData() 函數(shù), 并用到前面生成的模型索引index 。代碼如下:theModel->setData(index, "new 讓em",Qt二DisplayRole);在使用setData()函數(shù)時(shí),必須指定設(shè)置數(shù)據(jù)的角色,這里的角色是Qt:DisplayRole ,它是用于顯示的角色,即項(xiàng)的文字標(biāo)題。3)插入項(xiàng)“插入項(xiàng)”按鈕的功能是在列表的當(dāng)前行前面插入一行,其實(shí)現(xiàn)代碼如下:void Widget:on_btnListInsert_clicked()/插入一行QModelIndex index;index=ui->
11、;listView->currentIndex(); / 當(dāng)前 modelIndextheModel->insertRow(index.row(); / 在當(dāng)前行的前面插入一行theModel->setData(index,"inserted item",Qt:DisplayRole); / 設(shè)置顯示文字theModel->setData(index,Qt:AlignRight,Qt:TextAlignmentRole); /設(shè)置對(duì)齊方式,不起作ui->listView->setCurrentIndex(index); 設(shè)置當(dāng)前選中的行
12、QListView二currentIndex()猶得當(dāng)刖項(xiàng)的模型索引 index , index.row()則返回這個(gè)模型索引的行號(hào)。4)刪除當(dāng)前項(xiàng)使用QStringListModel 的removeRow()函數(shù)刪除某一行的代碼如下:void Widget:on_btnListDelete_clicked()刪除當(dāng)前行一一QModelIndex index;index=ui->listView->currentIndex(); / 獲取當(dāng)前 modelIndextheModel->removeRow(index.row(); / 刪除當(dāng)前行5)刪除列表刪除列表的所有項(xiàng)可使用
13、QStringListModel 的 removeRows(int row, intcount)函數(shù),它表示從行號(hào)row開始刪除count行。代碼如下:void Widget:on_btnListClear_clicked()/消除ListView的所有項(xiàng)theModel->removeRows(0,theModel->rowCount(); 以文本顯示數(shù)據(jù)模型的內(nèi)容以上在對(duì)界面上ListView 的項(xiàng)進(jìn)行編輯時(shí),實(shí)際操作的都是其關(guān)聯(lián)的數(shù) 據(jù)模型theModel ,在對(duì)數(shù)據(jù)模型進(jìn)行插入、添加、刪除項(xiàng)操作后,內(nèi)容立即在 ListView 上顯示出來,這是數(shù)據(jù)模型與視圖組件之間信號(hào)與槽
14、的作用,當(dāng)數(shù)據(jù) 模型的內(nèi)容發(fā)生改變時(shí),通知視圖組件更新顯示。同樣的,當(dāng)在ListView 上雙擊一行進(jìn)入編輯狀態(tài),修改一個(gè)項(xiàng)的文字內(nèi) 容后,這部分內(nèi)容也保存到數(shù)據(jù)模型里了。那么,數(shù)據(jù)模型內(nèi)部應(yīng)該保存有最 新的數(shù)據(jù)內(nèi)容,對(duì)于 QStringListModel模型來說,通過stringList() 函數(shù)可以得到其最新的數(shù)據(jù)副本。界面上的“顯示數(shù)據(jù)模型的StringList ”按鈕獲取數(shù)據(jù)模型的stringList ,并用多行文本的形式顯示其內(nèi)容,以檢驗(yàn)對(duì)數(shù)據(jù)模 型修改數(shù)據(jù),特別是在界面上修改列表項(xiàng)的文字后,其內(nèi)部的數(shù)據(jù)是否同步更 新了。以下是界面上的“顯示數(shù)據(jù)模型的StringList ”按鈕的c
15、licked。 信號(hào)的槽函數(shù)代碼,它通過數(shù)據(jù)模型的 stringList()函數(shù)獲取字符串列表,并在plainTextEdit里逐行顯示:void Widget二on_btnTextImport_clicked()/顯示數(shù)據(jù)模型的 StringListQStringList tmpList;tmpList=theModel->stringList();/ 獲取數(shù)據(jù)模型的StringListui->plainTextEdit->clear(); / 文本框清空for (int i=0; i<tmpList.count();i+)ui->plainTextEdit-&
16、gt;appendPlainText(tmpList.at(i);/ 顯示數(shù)據(jù)模型的 StringList()返回的內(nèi))程序運(yùn)行時(shí),無論對(duì)ListView的列表做了什么編輯和修改,單擊“顯示數(shù)據(jù)模型的StringList ”按鈕,在文本框里顯示的文字內(nèi)容與ListV ew 里總是完全相同的,說明數(shù)據(jù)模型的數(shù)據(jù)與界面上顯示的內(nèi)容是同步的。其他功能QListView 的clicked。信號(hào)會(huì)傳遞一個(gè) QModellndex 類型的參數(shù),禾用該參數(shù),可以顯示當(dāng)前項(xiàng)的模型索引的行和列的信息,實(shí)現(xiàn)代碼如下:void Widget二on_listView_clicked(const QModelIndex &index)顯示QModelIndex的行、列號(hào)ui->LabInfo->setText(QString:asprintf(" 當(dāng)前項(xiàng):row=%d, column=%d", index.row(), index.column();在這個(gè)實(shí)例中,通過QStringListModel 和QListView說明了數(shù)據(jù)模型與視圖組件之間構(gòu)成Model/View結(jié)構(gòu)的基
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度農(nóng)業(yè)生態(tài)保護(hù)承包協(xié)議3篇
- 專項(xiàng)2024進(jìn)出口貿(mào)易合作勞動(dòng)協(xié)議版A版
- 專業(yè)防水服務(wù)協(xié)議規(guī)范版B版
- 專業(yè)土方買賣協(xié)議指導(dǎo)文本(2024版)版B版
- 專業(yè)方木買賣:2024年協(xié)議范本一
- 2025年度歷史文化街區(qū)拆遷承包合同4篇
- 2025年度展覽館場(chǎng)地借用及展覽策劃服務(wù)合同4篇
- 二零二四商標(biāo)權(quán)轉(zhuǎn)讓與市場(chǎng)推廣服務(wù)合同范本3篇
- 二零二五年度文化產(chǎn)業(yè)園項(xiàng)目合作協(xié)議3篇
- 不動(dòng)產(chǎn)居間服務(wù)協(xié)議模板2024版B版
- 智慧財(cái)務(wù)綜合實(shí)訓(xùn)
- 安徽省合肥市2021-2022學(xué)年七年級(jí)上學(xué)期期末數(shù)學(xué)試題(含答案)3
- 教育專家報(bào)告合集:年度得到:沈祖蕓全球教育報(bào)告(2023-2024)
- 肝臟腫瘤護(hù)理查房
- 護(hù)士工作壓力管理護(hù)理工作中的壓力應(yīng)對(duì)策略
- 2023年日語考試:大學(xué)日語六級(jí)真題模擬匯編(共479題)
- 皮帶拆除安全技術(shù)措施
- ISO9001(2015版)質(zhì)量體系標(biāo)準(zhǔn)講解
- 《培訓(xùn)資料緊固》課件
- 黑龍江省政府采購評(píng)標(biāo)專家考試題
- 成品煙道安裝施工方案
評(píng)論
0/150
提交評(píng)論