日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

C++ Qt开发:StringListModel字符串列表映射组件

發布時間:2023/12/24 windows 21 coder
生活随笔 收集整理的這篇文章主要介紹了 C++ Qt开发:StringListModel字符串列表映射组件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Qt 是一個跨平臺C++圖形界面開發庫,利用Qt可以快速開發跨平臺窗體應用程序,在Qt中我們可以通過拖拽的方式將不同組件放到指定的位置,實現圖形化開發極大的方便了開發效率,本章將重點介紹QStringListModel字符串映射組件的常用方法及靈活運用。

QStringListModel 是 Qt 中用于處理字符串列表數據的模型類之一,它是 QAbstractListModel 的子類,用于在 Qt 的視圖類(如 QListViewQComboBox 等)中顯示字符串列表。該組件是用于在Qt中快速顯示字符串列表的便捷模型類。該組件通常會配合ListView一起使用,例如將ListView組件與Model模型綁定,當ListView組件內有數據更新時,就可以利用映射將數據模型中的數值以字符串格式提取出來,同理也可實現將字符串賦值到指定的ListView組件內。

以下是對 QStringListModel 的概述:

  • 繼承關系: QStringListModel 繼承自 QAbstractListModel
  • 用途: QStringListModel 主要用于將字符串列表(QStringList)與視圖進行綁定,使得這些字符串可以在視圖中顯示和管理。
  • 特點:
    • 可以通過 setStringList 方法設置字符串列表。
    • 提供了獲取和設置數據的接口,可以通過模型索引訪問和修改數據。
    • 適用于顯示簡單的字符串列表,不涉及復雜的數據結構。
  • 常見操作:
    • 設置字符串列表: 使用 setStringList 方法設置要在視圖中顯示的字符串列表。
    • 獲取字符串列表: 使用 stringList 方法獲取當前模型中的字符串列表。
    • 訪問和修改數據: 可以使用模型索引通過 data 方法獲取數據,通過 setData 方法修改數據。

以下是 QStringListModel 的一些常用方法,說明以及概述,按表格形式呈現:

方法 描述
QStringListModel(QObject * parent = nullptr) 構造函數,創建一個 QStringListModel 對象。
QStringListModel(const QStringList & strings, QObject * parent = nullptr) 構造函數,創建一個包含指定字符串列表的 QStringListModel 對象。
QStringList stringList() const 獲取當前模型中的字符串列表。
void setStringList(const QStringList & strings) 設置模型中的字符串列表。
Qt::ItemFlags flags(const QModelIndex & index) const 返回指定索引處的項目標志。
QModelIndex index(int row, int column, const QModelIndex & parent = QModelIndex()) const 返回指定行、列和父索引的模型索引。
QModelIndex parent(const QModelIndex & child) const 返回指定子索引的父索引。
int rowCount(const QModelIndex & parent = QModelIndex()) const 返回給定父索引下的行數。
int columnCount(const QModelIndex & parent = QModelIndex()) const 返回給定父索引下的列數。
QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const 返回給定索引處的角色為 role 的數據。
bool setData(const QModelIndex & index, const QVariant & value, int role = Qt::EditRole) 設置給定索引處的角色為 role 的數據為 value
bool insertRows(int row, int count, const QModelIndex & parent = QModelIndex()) 在給定父索引下的 row 位置處插入 count 行。
bool removeRows(int row, int count, const QModelIndex & parent = QModelIndex()) 從給定父索引下的 row 位置開始刪除 count 行。

這些方法使 QStringListModel 可以方便地管理和操作字符串列表數據,并能夠與 Qt 的視圖組件集成,實現數據的顯示和交互。

首先繪制UI界面,如下圖中所示,左側是一個ListView組件,右側是一個PlainTextEdit組件;

1.1 初始化模型

如下代碼演示了如何在 MainWindow 中使用 QStringListModelQListView 來展示一個字符串列表。

以下是該代碼的一些說明:

  1. 在構造函數中,首先使用 QStringList theStringList 創建了一個字符串列表,并向其中添加了一些城市名稱。
  2. 接著,創建了一個 QStringListModel 對象 model 并使用 setStringList 方法將先前創建的字符串列表導入模型中。
  3. 然后,通過 ui->listView->setModel(model) 將模型設置到 QListView 中,從而使模型中的數據在 QListView 中顯示。
  4. 使用 setEditTriggers 方法設置了編輯觸發器,使得可以通過雙擊或選擇項目來觸發編輯操作。

這樣,通過 QStringListModelQListView 的結合使用,可以很方便地在界面上展示和管理字符串列表的數據。

#include <iostream>
#include <QStringList>
#include <QStringListModel>

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 初始化一個StringList字符串列表
    QStringList theStringList;
    theStringList << "北京" << "上海" << "廣州" << "深圳" << "山東" << "四川";

    // 創建并使用數據模型
    model = new QStringListModel(this);

    // 導入模型數據
    model->setStringList(theStringList);

    // 為listView設置模型
    ui->listView->setModel(model);
    ui->listView->setEditTriggers(QAbstractItemView::DoubleClicked |
                                  QAbstractItemView::SelectedClicked);
}

MainWindow::~MainWindow()
{
    delete ui;
}

運行后左側的ListView組將將被初始化為城市地址,如下圖所示;

1.2 添加與插入

如下代碼演示了如何在 MainWindow 中通過按鈕的點擊事件向 QStringListModel 中添加或插入數據。

以下是代碼的一些說明:

  1. on_btnListAppend_clicked 方法用于在 QStringListModel 的末尾添加一行。具體步驟包括:
    • 使用 insertRow 在模型的末尾插入一行。
    • 獲取最后一行的索引。
    • 從界面的 lineEdit 獲取輸入的文本。
    • 使用 setData 方法將文本設置到模型的指定索引處。
    • 使用 setCurrentIndex 方法將最后一行設置為當前選中行。
    • 清空輸入框。
  2. on_btnListInsert_clicked 方法用于在當前選中行的前面插入一行。具體步驟包括:
    • 獲取當前選中行的索引。
    • 使用 insertRow 在當前行的前面插入一行。
    • 從界面的 lineEdit 獲取輸入的文本。
    • 使用 setData 方法將文本設置到模型的指定索引處。
    • 使用 setData 方法設置對齊方式為右對齊。
    • 使用 setCurrentIndex 方法將當前行設置為當前選中行。

這樣,通過這兩個按鈕的點擊事件,可以向 QStringListModel 中添加或插入數據,并在 QListView 中進行顯示。

// 添加一行
void MainWindow::on_btnListAppend_clicked()
{
    model->insertRow(model->rowCount());                       // 在尾部插入一行
    QModelIndex index = model->index(model->rowCount()-1,0);   // 獲取最后一行的索引
    QString LineText = ui->lineEdit->text();
    
    model->setData(index,LineText,Qt::DisplayRole);            // 設置顯示文字
    ui->listView->setCurrentIndex(index);                      // 設置當前行選中
    ui->lineEdit->clear();
}

// 插入一行數據到ListView
void MainWindow::on_btnListInsert_clicked()
{
    QModelIndex index;

    index= ui->listView->currentIndex();             // 獲取當前選中行
    model->insertRow(index.row());                   // 在當前行的前面插入一行
    
    QString LineText = ui->lineEdit->text();
    model->setData(index,LineText,Qt::DisplayRole);             // 設置顯示文字
    model->setData(index,Qt::AlignRight,Qt::TextAlignmentRole); // 設置對其方式
    ui->listView->setCurrentIndex(index);                       // 設置當前選中行
}

運行后輸出如下圖,使用SetData則可以在index位置設置字符串,并最終setCurrentIndex設置到當前下標處;

1.3 轉換字符串

如下代碼演示了如何通過按鈕的點擊事件將 QStringListModel 的數據導入到 QPlainTextEdit 中。

以下是代碼的一些說明:

  • 使用 stringList 方法獲取數據模型的字符串列表。
  • 清空 QPlainTextEdit,準備追加數據。
  • 循環遍歷字符串列表,并將每個字符串追加到 QPlainTextEdit 中,每個字符串之間用逗號隔開。

這樣,通過這個按鈕的點擊事件,可以將 QStringListModel 中的數據導入到 QPlainTextEdit 中。

// 顯示數據模型文本到QPlainTextEdit
void MainWindow::on_btnTextImport_clicked()
{
    QStringList pList;

    pList = model->stringList();    // 獲取數據模型的StringList
    ui->plainTextEdit->clear();     // 先清空文本框

    // 循環追加數據
    for(int x=0;x< pList.count();x++)
    {
        ui->plainTextEdit->appendPlainText(pList.at(x) + QString(","));
    }
}

當點擊顯示數據模型時,則會將列表轉換為字符串并按照特定格式輸出到編輯框內,如下圖所示;

附件下載

StringListModel.zip

總結

以上是生活随笔為你收集整理的C++ Qt开发:StringListModel字符串列表映射组件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。