欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

 1 概述

QStringListModel用于處理字符串列表的數(shù)據(jù)模型,它可以作為QListView的數(shù)據(jù)模型,在界 面上顯示和編輯字符串列表。

QStringListModel的setStringList()函數(shù)可以初始化數(shù)據(jù)模型的字符串列表的內(nèi)容,stringList() 函數(shù)返回數(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:返回模型中指定索引的標志。

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的使用

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

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

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

實例samp5_2的窗口是從QWidget繼承而來的類Widget,界面采用可視化設(shè)計。在Widget 類中定義一個 QStringListModel 類的變量:

QStringListModel *theModel;

在Widget類的構(gòu)造函數(shù)中進行變量的創(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ù)模型。 程序運行后,界面上ListView組件里就會顯示初始化的字符串列表的內(nèi)容。

4.2 編輯、添加、刪除項的操作

(1)編輯項

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

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

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

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

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

(2)添加項

添加項是要在列表的最后添加一行,界面上“添加項”按鈕的槽函數(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è)置當前選中的行
}

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

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

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

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

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

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

在使用setData()函數(shù)時,必須指定設(shè)置數(shù)據(jù)的角色,這里的角色是Qt::DisplayRole它是用 于顯示的角色,即項的文字標題。

(3)插入項

“插入項”按鈕的功能是在列表的當前行前面插入一行,其實現(xiàn)代碼如下:

void Widget::on_btnListInsert_clicked()
{//插入一行
    QModelIndex  index;
    index=ui->listView->currentIndex(); //當前 modelIndex
    theModel->insertRow(index.row()); //在當前行的前面插入一行
    theModel->setData(index,"inserted item",Qt::DisplayRole); //設(shè)置顯示文字
    theModel->setData(index,Qt::AlignRight,Qt::TextAlignmentRole); //設(shè)置對齊方式,不起作用
    ui->listView->setCurrentIndex(index); //設(shè)置當前選中的行
}

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

(4)刪除當前項

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

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

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

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

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

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

同樣的,當在ListView上雙擊一行進入編輯狀態(tài),修改一個項的文字內(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)容,以檢驗對數(shù)據(jù)模型修改數(shù)據(jù),特別是在界面 上修改列表項的文字后,其內(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)容
}

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

4.4 其他功能

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

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

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

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

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

  • 在使用QListWidget的例子中,每個列表項是一個QListWidgetItem類型的變量,保存了項 的各種數(shù)據(jù),數(shù)據(jù)和顯示界面是一體的,對數(shù)據(jù)的修改操作就是對項關(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語言結(jié)構(gòu)體struct詳解

    C語言結(jié)構(gòu)體struct詳解

    C語言中,結(jié)構(gòu)體類型屬于一種構(gòu)造類型(其他的構(gòu)造類型還有:數(shù)組類型,聯(lián)合類型),下面這篇文章主要給大家介紹了關(guān)于C語言結(jié)構(gòu)體(struct)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-09-09
  • C++11新特性之自定義字面量

    C++11新特性之自定義字面量

    這篇文章主要介紹了C++11新特性之自定義字面量的相關(guān)資料,幫助大家更好的學習c++,感興趣的朋友可以了解下
    2020-08-08
  • C++ 之explicit關(guān)鍵字

    C++ 之explicit關(guān)鍵字

    今天我們來談?wù)凜++中的explicit關(guān)鍵字,這篇文章詳細介紹了C語言的關(guān)鍵字explicit關(guān)鍵字,本文有詳細的代碼實例,感興趣的同學可以借鑒參考
    2023-04-04
  • C++封裝IATHOOK類實例

    C++封裝IATHOOK類實例

    這篇文章主要介紹了C++封裝IATHOOK類的實現(xiàn)方法,對IAT的HOOK實例進行了封裝,非常具有實用價值,需要的朋友可以參考下
    2014-10-10
  • C語言中的strdup()函數(shù)和其與strcpy()函數(shù)的區(qū)別

    C語言中的strdup()函數(shù)和其與strcpy()函數(shù)的區(qū)別

    這篇文章主要介紹了C語言中的strdup()函數(shù)和其與strcpy()函數(shù)的區(qū)別,同樣用于拷貝字符串的兩個函數(shù)的異同值得注意,需要的朋友可以參考下
    2015-08-08
  • C語言實現(xiàn)數(shù)獨輔助器(附源碼)

    C語言實現(xiàn)數(shù)獨輔助器(附源碼)

    數(shù)獨是源自瑞士的一種數(shù)學游戲。是一種運用紙、筆進行演算的邏輯游戲。本文將利用C語言制作一個數(shù)獨輔助器,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-01-01
  • C語言對結(jié)構(gòu)體數(shù)組按照某項規(guī)則進行排序的實現(xiàn)過程探究

    C語言對結(jié)構(gòu)體數(shù)組按照某項規(guī)則進行排序的實現(xiàn)過程探究

    這篇文章主要介紹了C語言對結(jié)構(gòu)體數(shù)組按照某項規(guī)則進行排序的實現(xiàn)過程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-02-02
  • C++:string字符串的切片方式

    C++:string字符串的切片方式

    這篇文章主要介紹了C++:string字符串的切片方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • C語言零基礎(chǔ)精通變量與常量

    C語言零基礎(chǔ)精通變量與常量

    這篇文章主要為大家詳細介紹了C語言的變量和常量,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-04-04
  • c++通過引用實現(xiàn)三個數(shù)字求最大值

    c++通過引用實現(xiàn)三個數(shù)字求最大值

    下面我們將通過這個例子來說明引用的作為函數(shù)參數(shù)的使用方法。需要的朋友可以過來參考下,希望對大家有所幫助
    2013-10-10

最新評論