最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

QT中QStringListModel類的應(yīng)用介紹

 更新時間:2024年01月03日 11:36:18   作者:冷凝女子  
QStringListModel是最簡單的模型類,具備向視圖提供字符串?dāng)?shù)據(jù)的能力,本文主要介紹了QT中QStringListModel類的應(yīng)用介紹,具有一定的參考價(jià)值,感興趣的可以了解一下

 1 概述

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ù)都會及時更 新到數(shù)據(jù)模型內(nèi)的字符串列表里。

QStringListModel提供編輯和修改字符串列表數(shù)據(jù)的函數(shù),如insertRows()、removeRows()、 setData() 等,這些操作直接影響數(shù)據(jù)模型內(nèi)部的字符串列表,并且修改后的數(shù)據(jù)會自動在關(guān)聯(lián)的 ListView 組件里刷新顯示。

2 QStringListModel常用方法

1. QStringListModel(const QStringList &strings, QObject *parent = nullptr):構(gòu)造函數(shù),用于創(chuàng)建一個QStringListModel對象,并初始化它的數(shù)據(jù)為strings列表。

2. int rowCount(const QModelIndex &parent = QModelIndex()) const:返回模型中的行數(shù)。

3. QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const:返回模型中指定索引的數(shù)據(jù)。

4. bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole):設(shè)置模型中指定索引的數(shù)據(jù)為value。

5. Qt::ItemFlags flags(const QModelIndex &index) const:返回模型中指定索引的標(biāo)志。

6. bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()):在模型中的指定位置插入count行。

7. bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()):從模型中的指定位置刪除count行。

8. QStringList stringList() const:返回模型中的QString列表。

9. void setStringList(const QStringList &strings):設(shè)置模型中的QString列表為strings。

3 使用QStringListModel的步驟 

1. 創(chuàng)建一個QStringListModel對象,并初始化它的數(shù)據(jù)為一個QString列表。

2. 將QStringListModel對象設(shè)置為視圖組件的模型。

3. 通過QStringListModel對象提供的方法來修改模型中的數(shù)據(jù)。

4 QStringListModel的使用

實(shí)例samp5_2采用QStringListModel作 為數(shù)據(jù)模型,QListView組件作為視圖組件, 演示了QStringListModel和QListView構(gòu)成 Model/View結(jié)構(gòu)編輯字符串列表的功能,程 序運(yùn)行時界面如圖1所示。

窗口左側(cè)是對QStrmgListModel的一些 操作,右側(cè)的QPlaintextEdit組件顯示QString ListModel::stringList()的內(nèi)容,以查看其是否 與界面上ListView組件顯示的內(nèi)容一致。

4.1 Model/View結(jié)構(gòu)對象和組件初始化

實(shí)例samp5_2的窗口是從QWidget繼承而來的類Widget,界面采用可視化設(shè)計(jì)。在Widget 類中定義一個 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(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    QStringList theStrList; //保存初始 StringList
    theStrList<<"北京"<<"上海"<<"天津"<<"河北"<<"山東"<<"四川"<<"重慶"<<"廣東"<<"河南"; //初始化 StringList
    theModel=new QStringListModel(this); //創(chuàng)建數(shù)據(jù)模型
    theModel->setStringList(theStrList); //為模型設(shè)置StringList,會導(dǎo)入StringList的內(nèi)容
    ui->listView->setModel(theModel); //為listView設(shè)置數(shù)據(jù)模型
    ui->listView->setEditTriggers(QAbstractItemView::DoubleClicked | QAbstractItemView::SelectedClicked);
}

QStringListModel的setStringList()函數(shù)將一個字符串列表的內(nèi)容作為數(shù)據(jù)模型的初始數(shù)據(jù)內(nèi)容。 QListView的setModel()函數(shù)為界面視圖組件設(shè)置一個數(shù)據(jù)模型。 程序運(yùn)行后,界面上ListView組件里就會顯示初始化的字符串列表的內(nèi)容。

4.2 編輯、添加、刪除項(xiàng)的操作

(1)編輯項(xiàng)

QListView::setEditTriggers()函數(shù)設(shè)置QListView的條目是否可以編輯,以及如何進(jìn)入編輯狀 態(tài),函數(shù)的參數(shù)是QAbstractItemView::EditTrigger枚舉類型值的組合。

在雙擊,或選擇并單擊列表項(xiàng)后,就進(jìn)入編輯狀態(tài)。

ui->listView->setEditTriggers(QAbstractItemView::DoubleClicked | QAbstractItemView::SelectedClicked);

若要設(shè)置為不可編輯,則可以設(shè)置為:

ui->listView->setEditTriggers(QAbstractItemView::NoEditTriggers);

(2)添加項(xiàng)

添加項(xiàng)是要在列表的最后添加一行,界面上“添加項(xiàng)”按鈕的槽函數(shù)代碼如下:

void Widget::on_btnListAppend_clicked()
{ //添加一行
    theModel->insertRow(theModel->rowCount()); //在尾部插入一空行
    QModelIndex index=theModel->index(theModel->rowCount()-1,0);//獲取最后一行
    theModel->setData(index,"new item",Qt::DisplayRole);//設(shè)置顯示文字
    ui->listView->setCurrentIndex(index); //設(shè)置當(dāng)前選中的行
}

對數(shù)據(jù)的操作都是針對數(shù)據(jù)模型的,所以,插入一行使用的是QStringListModel的insertRow (int row)函數(shù),其中row是一個行號,表示在row行之前插入一行。要在列表的最后插入一行,參 數(shù)row設(shè)置為列表當(dāng)前的行數(shù)即可。

這樣只是在列表尾部添加一個空行,沒有任何文字。為了給添加的項(xiàng)設(shè)置一個缺省的文字標(biāo) 題,首先要獲得新增項(xiàng)的模型索引,即:

QModelIndex index=theModel->index(theModel->rowCount()-1,0);//獲取最后一行

QStringListModel的index()函數(shù)根據(jù)傳遞的行號、列號、父項(xiàng)的模型索引生成一個模型索引, 這行代碼為新增的最后一個項(xiàng)生成一個模型索引index。

為新增的項(xiàng)設(shè)置一個文字標(biāo)題“new item”,使用setData()函數(shù),并用到前面生成的模型索引 index。代碼如下:

theModel->setData(index,"new item",Qt::DisplayRole);//設(shè)置顯示文字

在使用setData()函數(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->listView->currentIndex(); //當(dāng)前 modelIndex
    theModel->insertRow(index.row()); //在當(dāng)前行的前面插入一行
    theModel->setData(index,"inserted item",Qt::DisplayRole); //設(shè)置顯示文字
    theModel->setData(index,Qt::AlignRight,Qt::TextAlignmentRole); //設(shè)置對齊方式,不起作用
    ui->listView->setCurrentIndex(index); //設(shè)置當(dāng)前選中的行
}

QListView::cunentIndex()獲得當(dāng)前項(xiàng)的模型索引index,index.row()則返回這個模型索引的行號。

(4)刪除當(dāng)前項(xiàng)

使用QStringListModel的removeRow()函數(shù)刪除某一行的代碼如下:

void Widget::on_btnListDelete_clicked()
{//刪除當(dāng)前行
    QModelIndex  index;
    index=ui->listView->currentIndex(); //獲取當(dāng)前 modelIndex
    theModel->removeRow(index.row()); //刪除當(dāng)前行
}

(5)刪除列表
刪除列表的所有項(xiàng)可使用QStringListModel的removeRows(introw,intcount)函數(shù),它表示從行號row開始刪除count行。代碼如下:

void Widget::on_btnListClear_clicked()
{//清除ListView的所有項(xiàng)
    theModel->removeRows(0,theModel->rowCount());
}

4.3 以文本顯示數(shù)據(jù)模型的內(nèi)容

以上在對界面上ListView的項(xiàng)進(jìn)行編輯時,實(shí)際操作的都是其關(guān)聯(lián)的數(shù)據(jù)模型theModeI,在 對數(shù)據(jù)模型進(jìn)行插入、添加、刪除項(xiàng)操作后,內(nèi)容立即在ListView上顯示出來,這是數(shù)據(jù)模型與 視圖組件之間信號與槽的作用,當(dāng)數(shù)據(jù)模型的內(nèi)容發(fā)生改變時,通知視圖組件更新顯示。

同樣的,當(dāng)在ListView上雙擊一行進(jìn)入編輯狀態(tài),修改一個項(xiàng)的文字內(nèi)容后,這部分內(nèi)容也 保存到數(shù)據(jù)模型里。

那么,數(shù)據(jù)模型內(nèi)部應(yīng)該保存有最新的數(shù)據(jù)內(nèi)容,對于QStringListModel模型來說,通過 stringList()函數(shù)可以得到其最新的數(shù)據(jù)副本。界面上的“顯示數(shù)據(jù)模型的StringList"按鈕獲取數(shù)據(jù) 模型的stringList,并用多行文本的形式顯示其內(nèi)容,以檢驗(yàn)對數(shù)據(jù)模型修改數(shù)據(jù),特別是在界面 上修改列表項(xiàng)的文字后,其內(nèi)部的數(shù)據(jù)是否同步更新了。

以下是界面上的“顯示數(shù)據(jù)模型的StringList"按鈕的clicked()信號的槽函數(shù)代碼,它通過數(shù) 據(jù)模型的stringList()函數(shù)獲取字符串列表,并在plainTextEdit里逐行顯示:

void Widget::on_btnTextImport_clicked()
{// 顯示數(shù)據(jù)模型的StringList
    QStringList tmpList;
    tmpList=theModel->stringList();//獲取數(shù)據(jù)模型的StringList
    ui->plainTextEdit->clear(); //文本框清空
    for (int i=0; i<tmpList.count();i++)
        ui->plainTextEdit->appendPlainText(tmpList.at(i)); //顯示數(shù)據(jù)模型的StringList()返回的內(nèi)容
}

程序運(yùn)行時,無論對ListView的列表做了什么編輯和修改,單擊“顯示數(shù)據(jù)模型的StringList" 按鈕,在文本框里顯示的文字內(nèi)容與ListView里總是完全相同的,說明數(shù)據(jù)模型的數(shù)據(jù)與界面上 顯示的內(nèi)容是同步的。

4.4 其他功能

QListView的clicked()信號會傳遞一個QModelIndex類型的參數(shù),利用該參數(shù),可以顯示當(dāng)前 項(xiàng)的模型索引的行和列的信息,實(shí)現(xiàn)代碼如下:

void Widget::on_listView_clicked(const QModelIndex &index)
{ //顯示QModelIndex的行、列號
    ui->LabInfo->setText(QString::asprintf("當(dāng)前項(xiàng):row=%d, column=%d",
                        index.row(),index.column()));
}

在這個實(shí)例中,通過QStringListModel和QListView說明了數(shù)據(jù)模型與視圖組件之間構(gòu)成 Model/View結(jié)構(gòu)的基本原理。

實(shí)例samp4_7中采用QListWidget設(shè)計(jì)了一個列表編輯器,對比這兩個實(shí)例,可以 發(fā)現(xiàn)如下兩點(diǎn)。

  • 在Model/View結(jié)構(gòu)中,數(shù)據(jù)模型與視圖組件是分離的,可以直接操作數(shù)據(jù)模型以修改數(shù) 據(jù),在視圖組件中做的修改也會自動保存到數(shù)據(jù)模型里。

  • 在使用QListWidget的例子中,每個列表項(xiàng)是一個QListWidgetItem類型的變量,保存了項(xiàng) 的各種數(shù)據(jù),數(shù)據(jù)和顯示界面是一體的,對數(shù)據(jù)的修改操作就是對項(xiàng)關(guān)聯(lián)的變量的修改。

所以,這是Model/View結(jié)構(gòu)與便利組件之間的主要區(qū)別。

到此這篇關(guān)于QT中QStringListModel類的應(yīng)用介紹的文章就介紹到這了,更多相關(guān)QT QStringListModel類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++實(shí)現(xiàn)簡易萬年歷

    C++實(shí)現(xiàn)簡易萬年歷

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡易萬年歷,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • exec()函數(shù)在C++中的應(yīng)用及其用法

    exec()函數(shù)在C++中的應(yīng)用及其用法

    exec()函數(shù)在C++中是一個進(jìn)程控制函數(shù),用于創(chuàng)建新進(jìn)程執(zhí)行其他程序或命令行指令。exec()函數(shù)可以替換當(dāng)前進(jìn)程的代碼和數(shù)據(jù),創(chuàng)建新的進(jìn)程運(yùn)行其他程序。exec()函數(shù)有多個版本,例如execl、execv、execle、execve等,根據(jù)不同的參數(shù)類型和個數(shù)來使用
    2023-05-05
  • Objective-C不帶加減號的方法實(shí)例

    Objective-C不帶加減號的方法實(shí)例

    顯而易見的事實(shí)是,Objective-C 中,+ 表示類方法,- 表示實(shí)例方法,這篇文章主要給大家介紹了關(guān)于Objective-C不帶加減號的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • C++實(shí)現(xiàn)將輸入的內(nèi)容輸出到文本文件

    C++實(shí)現(xiàn)將輸入的內(nèi)容輸出到文本文件

    這篇文章主要介紹了C++實(shí)現(xiàn)將輸入的內(nèi)容輸出到文本文件問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C語言中sizeof()與strlen()函數(shù)的使用入門及對比

    C語言中sizeof()與strlen()函數(shù)的使用入門及對比

    這篇文章主要介紹了C語言中sizeof()與strlen()函數(shù)的使用入門及對比,同時二者在C++中的使用情況也基本上同理,是需要的朋友可以參考下
    2015-12-12
  • C++菱形繼承及解決方法詳解

    C++菱形繼承及解決方法詳解

    這篇文章主要介紹了C++菱形繼承及解決方法詳解,在多繼承結(jié)構(gòu)中,存在著很多問題,比如從不同基類中繼承了同名成員,派生類中也定義了同名成員,這種二義性問題很好解決,加上要訪問的基類的類名限制就可以了,需要的朋友可以參考下
    2023-08-08
  • C語言正則表達(dá)式操作示例

    C語言正則表達(dá)式操作示例

    這篇文章主要介紹了C語言正則表達(dá)式操作,結(jié)合實(shí)例形式分析了C語言正則匹配類似郵箱格式功能的實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-07-07
  • C++的繼承法則詳解

    C++的繼承法則詳解

    本文詳細(xì)介紹了C++中的繼承機(jī)制,包括繼承的概念、定義、使用方法、訪問限定符、賦值兼容轉(zhuǎn)換、作用域、默認(rèn)成員函數(shù)、友元關(guān)系、靜態(tài)成員以及單繼承、多繼承和菱形繼承,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • C語言實(shí)現(xiàn)學(xué)生消費(fèi)管理系統(tǒng)

    C語言實(shí)現(xiàn)學(xué)生消費(fèi)管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)學(xué)生消費(fèi)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • 利用C語言替換文件中某一行的方法

    利用C語言替換文件中某一行的方法

    大家都知道C語言提供了文件操作,但是替換文件的某一行比較麻煩,下面是我使用的一個方法,現(xiàn)在分享給大家,有需要的朋友們可以參考借鑒。
    2016-09-09

最新評論

开江县| 咸丰县| 乐至县| 桦甸市| 巫山县| 延长县| 通辽市| 隆化县| 宁阳县| 铜梁县| 南安市| 渑池县| 鹿邑县| 钟山县| 福泉市| 荥经县| 洞头县| 丰县| 伊川县| 资源县| 嘉黎县| 台江县| 泸定县| 从江县| 西峡县| 常山县| 密云县| 馆陶县| 类乌齐县| 衡水市| 大安市| 枣庄市| 瓦房店市| 德昌县| 阿克苏市| 千阳县| 彩票| 石家庄市| 颍上县| 鲜城| 乌审旗|