<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      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

      posted @ 2023-12-21 15:34  lyshark  閱讀(773)  評論(1)    收藏  舉報
      主站蜘蛛池模板: 国产日韩入口一区二区| 亚洲精品国男人在线视频| 天堂网亚洲综合在线| 久久国内精品自在自线91| 蜜桃av无码免费看永久| 国产在线观看免费观看不卡| 国产偷国产偷亚洲清高动态图| 亚洲高清国产自产拍av| 国产粉嫩高中无套进入| 久久精品一区二区三区综合| 博野县| 精品粉嫩国产一区二区三区| 精品国产污污免费网站| 国产做a爱片久久毛片a片| 成人av午夜在线观看| 加勒比色综合久久久久久久久| 四虎成人在线观看免费| 新建县| 人妻中文字幕精品一页| 日本视频一两二两三区| 国产SUV精品一区二区四| 一区二区三区在线色视频| 性做久久久久久久久| 精品久久久久久无码人妻蜜桃| 亚洲高清国产拍精品网络战| 色一伊人区二区亚洲最大| 国产午夜A理论毛片| 国产精品人妻久久无码不卡| 人妻中文字幕不卡精品| 国产美女裸身网站免费观看视频| 伊人成人在线视频免费| 亚洲欧美中文字幕5发布 | 国产一区二区三区黄色大片| 99热国产这里只有精品9| 乱女伦露脸对白在线播放| 猫咪www免费人成网站| 久久精品国产蜜臀av| 国内自拍视频在线一区| 亚洲成av人片在线观看www| 欧美不卡无线在线一二三区观| 久久亚洲精品中文字幕馆|