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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

qt中Qtableview的用法

發布時間:2023/12/18 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 qt中Qtableview的用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

QTableView常用于實現數據的表格顯示。下面我們如何按步驟實現學生信息表格:

一?添加表頭

????//準備數據模型
????QStandardItemModel?*student_model?=?new?QStandardItemModel();
????student_model->setHorizontalHeaderItem(0,?new?QStandardItem(QObject::tr("Name")));
????student_model->setHorizontalHeaderItem(1,?new?QStandardItem(QObject::tr("NO.")));
????student_model->setHorizontalHeaderItem(2,?new?QStandardItem(QObject::tr("Sex")));
????student_model->setHorizontalHeaderItem(3,?new?QStandardItem(QObject::tr("Age")));
????student_model->setHorizontalHeaderItem(4,?new?QStandardItem(QObject::tr("College")));
????//利用setModel()方法將數據模型與QTableView綁定
????ui->student_tableview->setModel(student_model);


二?設置表格屬性

????//設置列寬不可變動,即不能通過鼠標拖動增加列寬????????
????ui->student_tableview->horizontalHeader()->setResizeMode(0,?QHeaderView::Fixed);???
????ui->student_tableview->horizontalHeader()->setResizeMode(1,?QHeaderView::Fixed);???
????ui->student_tableview->horizontalHeader()->setResizeMode(2,?QHeaderView::Fixed);???
????ui->student_tableview->horizontalHeader()->setResizeMode(3,?QHeaderView::Fixed);???
????ui->student_tableview->horizontalHeader()->setResizeMode(4,?QHeaderView::Fixed);???

????//設置表格的各列的寬度值????????
????ui->student_tableview->setColumnWidth(0,100);????
????ui->student_tableview->setColumnWidth(1,100);????
????ui->student_tableview->setColumnWidth(2,100);????
????ui->student_tableview->setColumnWidth(3,100);????
????ui->student_tableview->setColumnWidth(4,100);????????

????//默認顯示行頭,如果你覺得不美觀的話,我們可以將隱藏????????
????ui->student_tableview->verticalHeader()->hide();???????

????//設置選中時為整行選中????????
????ui->student_tableview->setSelectionBehavior(QAbstractItemView::SelectRows);?????????
??????
????//設置表格的單元為只讀屬性,即不能編輯????????
????ui->student_tableview->setEditTriggers(QAbstractItemView::NoEditTriggers);??????????

????//如果你用在QTableView中使用右鍵菜單,需啟用該屬性????????
????ui->tstudent_tableview->setContextMenuPolicy(Qt::CustomContextMenu);

?

三?動態添加行

????在表格中添加行時,我們只需要在model中插入數據即可,一旦model中的數據發生變化,QTabelView顯示就會做相應的變動

????//在第一行添加學生張三的個人信息(setItem函數的第一個參數表示行號,第二個表示列號,第三個為要顯示的數據)
????student_model->setItem(0,?0,?new?QStandardItem(“張三"));
????student_model->setItem(0,?1,?new?QStandardItem("20120202"));
????student_model->setItem(0,?2,?new?QStandardItem("男"));
????student_model->setItem(0,?3,?new?QStandardItem("18"));
????student_model->setItem(0,?4,?new?QStandardItem("土木學院"));


四?設置數據顯示的樣式?

????//設置單元格文本居中,張三的數據設置為居中顯示
????student_model->item(0,?0)->setTextAlignment(Qt::AlignCenter);
????student_model->item(0,?1)->setTextAlignment(Qt::AlignCenter);
????student_model->item(0,?2)->setTextAlignment(Qt::AlignCenter);
????student_model->item(0,?3)->setTextAlignment(Qt::AlignCenter);
????student_model->item(0,?4)->setTextAlignment(Qt::AlignCenter);

????//設置單元格文本顏色,張三的數據設置為紅色
????student_model->item(0,?0)->setForeground(QBrush(QColor(255,?0,?0)));?
????student_model->item(0,?1)->setForeground(QBrush(QColor(255,?0,?0)));?
????student_model->item(0,?2)->setForeground(QBrush(QColor(255,?0,?0)));?
????student_model->item(0,?3)->setForeground(QBrush(QColor(255,?0,?0)));?
????student_model->item(0,?4)->setForeground(QBrush(QColor(255,?0,?0)));?

????//將字體加粗
????student_model->item(0,?0)->setFont(?QFont(?"Times",?10,?QFont::Black?)?);
????student_model->item(0,?1)->setFont(?QFont(?"Times",?10,?QFont::Black?)?);
????student_model->item(0,?2)->setFont(?QFont(?"Times",?10,?QFont::Black?)?);
????student_model->item(0,?3)->setFont(?QFont(?"Times",?10,?QFont::Black?)?);
????student_model->item(0,?4)->setFont(?QFont(?"Times",?10,?QFont::Black?)?);

????//設置排序方式,按年齡降序顯示
????student_model->sort(3,?Qt::DescendingOrder);

Qt QStandardItemModel用法(超級詳細)

QStandardItemModel 是標準的以項數據(item data)為基礎的標準數據模型類,通常與 QTableView 組合成 Model/View 結構,實現通用的二維數據的管理功能。

本節介紹 QStandardltemModel 的使用,主要用到以下 3 個類:

  • QStandardItemModel:基于項數據的標準數據模型,可以處理二維數據。維護一個二維的項數據數組,每個項是一個 QStandardltem 類的變量,用于存儲項的數據、字體格式、對齊方式等。
  • QTableView:二維數據表視圖組件,有多個行和多個列,每個基本顯示單元是一個單元格,通過 setModel() 函數設置一個 QStandardItemModel 類的數據模型之后,一個單元格顯示 QStandardItemModel 數據模型中的一個項。
  • QItemSelectionModel:一個用于跟蹤視圖組件的單元格選擇狀態的類,當在 QTableView 選擇某個單元格,或多個單元格時,通過 QItemSelectionModel 可以獲得選中的單元格的模型索引,為單元格的選擇操作提供方便。

  • 這幾個類之間的關系是:QTableView 是界面視圖組件,其關聯的數據模型是 QStandardItem Model,關聯的項選擇模型是 QItemSelectionModel,QStandardItemModel 的數據管理的基本單元是 QStandardItem。

    實例 samp5_3 演示 QStandardItemModel 的使用,其運行時界面如圖 1 所示。



    圖 1 實例 samp5_3 的運行時界面


    該實例具有如下功能:

    • 打開一個純文本文件,該文件是規則的二維數據文件,通過字符串處理獲取表頭和各行各列的數據,導入到一個 QStandardItemModel 數據模型。
    • 編輯修改數據模型的數據,可以插入行、添加行、刪除行,還可以在 QTableView 視圖組件中直接修改單元格的數據內容。
    • 可以設置數據模型中某個項的不同角色的數據,包括文字對齊方式、字體是否粗體等。
    • 通過 QItemSelectionModel 獲取視圖組件上的當前單元格,以及選擇單元格的范圍,對選擇的單元格進行操作。
    • 將數據模型的數據內容顯示到 QPlainTextEdit 組件里,顯示數據模型的內容,檢驗視圖組件上做的修改是否與數據模型同步。
    • 將修改后的模型數據另存為一個文本文件。

    界面設計與主窗口類定義

    本實例的主窗口從 QMainWindow 繼承而來,中間的 TableView 和 PlainTextEdit 組件采用水平分割條布局。在 Action 編輯器中創建如圖 2 所示的一些 Action,并由 Action 創建主工具欄上的按鈕,下方的狀態欄設置了幾個 QLabel 組件,顯示當前文件名稱、當前單元格行號、列號,以及相應內容。



    圖 2 實例中創建的 Action


    主窗口類 MainWindow 里新增的定義如下(省略了 UI 設計器生成的界面組件的槽函數的聲明):

  • #define FixedColumnCount 6 //文件固定 6 列
  • class MainWindow : public QMainWindow
  • {
  • Q_OBJECT private:
  • QLabel *LabCurFile; //當前文件
  • QLabel *LabCellPos; //當前單元格行列號
  • QLabel *LabCellText; //當前單元格內容
  • QStandardItemModel * theModel; //數據模型
  • QItemSelectionModel *theSelection; //選擇模型
  • void iniModelFromStringList (QStringList&) ; //從 StringList 初始化數據模型
  • public:
  • explicit MainWindow(QWidget *parent = 0);
  • private slots:
  • //當前選擇單元格發生變化
  • void on_currentChanged(const QModelIndex &current, const QModelIndex &previous);
  • private:
  • Ui::MainWindow *ui;
  • };
  • 這里定義了數據模型變量 theModel,項數據選擇模型變量 theSelection。

    定義的私有函數 iniModelFromStringList() 用于在打開文件時,從一個 QStringList 變量的內容創建數據模型。

    自定義槽函數 on_currentChanged() 用于在 TableView 上選擇單元格發生變化時,更新狀態欄的信息顯示,這個槽函數將會與項選擇模型 theSelection 的 currentChanged() 信號關聯。

    QStandardltemModel的使用

    系統初始化

    在 MainWindow 的構造函數中進行界面初始化,數據模型和選擇模型的創建,以及與視圖組件的關聯,信號與槽的關聯等設置,代碼如下:

  • MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui (new Ui::MainWindow)
  • {
  • ui->setupUi(this);
  • setCentralWidget(ui->splitter);
  • theModel = new QStandardltemModel (2, FixedColumnCount, this) ; //數據模型
  • theSelection = new QItemSelectionModel (theModel) ;//選擇模型
  • connect(theSelection,SIGNAL(currentChanged(QModelIndex,QModelIndex)), this,SLOT(on_currentChanged(QModelIndex,QModelIndex)));
  • ui->tableView->setModel (theModel) ; //設置數據模型
  • ui->tableVi.evi-> setSelectionModel(theSelection) ; //設置選擇模型
  • ui->tableView->setSelectionMode(QAbstractItemView::ExtendedSelection);
  • ui->tableView->setSelectionBehavior(QAbstractItemView::SelectItems);
  • //創建狀態欄組件,代碼略
  • }
  • 在構造函數里首先創建數據模型 theModel,創建數據選擇模型時需要傳遞一個數據模型變量作為其參數。這樣,數據選擇模型 theSelection 就與數據模型 theModel 關聯,用于表示 theModel 的項數據選擇操作。

    創建數據模型和選擇模型后,為 TableView 組件設置數據模型和選擇模型:

    ui->tableView->setModel (theModel) ; //設置數據模型
    ui->tableView->setSelectionModel (theSelection) ; //設置選擇模型

    構造函數里還將自定義的槽函數 on_currentChanged() 與 theSelection 的 currentChanged() 信號關聯,用于界面上 tableView 選擇單元格發生變化時,顯示單元格的行號、列號、內容等信息,槽函數代碼如下:

  • void MainWindow::on_currentChanged(const QModelIndex &current, const QModelIndex &previous)
  • { //選擇單元格變化時的響應
  • if (current.isValid())
  • {
  • LabCellPos->setText (QString::asprintf ("當前單元格:%d 行,%d 列", current.row(),current.column()));
  • QStandardItem* aItem=theModel->itemFromIndex(current);
  • this->LabCellText->setText ("單元格內容:"+aItem->text());
  • QFont font=aItem->font();
  • ui->actFontBold->setChecked(font.bold());
  • }
  • }
  • 從文本文件導入數據

    QStandardItemModel 是標準的基于項數據的數據模型,以類似于二維數組的形式管理內部數據,適合于處理表格型數據,其顯示一般采用 QTableView。

    QStandardItemModel 的數據可以是程序生成的內存中的數據,也可以來源于文件。例如,在實際數據處理中,有些數據經常是以純文本格式保存的,它們有固定的列數,每一列是一項數據,實際構成一個二維數據表。圖 3 是本實例程序要打開的一個純文本文件的內容,文件的第 1 行是數據列的文字標題,相當于數據表的表頭,然后以行存儲數據,以 TAB 鍵間隔每列數據。

    當單擊工具欄上的“打開文件”按鈕時,需要選擇一個這樣的文件導入到數據模型,并在 tableView 上進行顯示和編輯。圖 3 的數據有 6 列,第 1 列是整數,第 2 至 4 列是浮點數,第 5 列是文字,第 6 列是邏輯型變量,“1”表示 true。



    圖 3 純文本格式的數據文件


    下面是“打開文件”按鈕的槽函數代碼:

  • void MainWindow::on_actOpen_triggered()
  • { //打開文件
  • //QString str;
  • QString curPath=QCoreApplication::applicationDirPath(); //獲取應用程序的路徑
  • //調用打開文件對話框打開一個文件
  • QString aFileName=QFileDialog::getOpenFileName(this,"打開一個文件",curPath, "井數據文件(*.txt);;所有文件(*.*)");
  • if (aFileName.isEmpty())
  • return; //如果未選擇文件,退出
  • ?
  • QStringList fFileContent;//文件內容字符串列表
  • QFile aFile(aFileName); //以文件方式讀出
  • if (aFile.open(QIODevice::ReadOnly | QIODevice::Text)) //以只讀文本方式打開文件
  • {
  • QTextStream aStream(&aFile); //用文本流讀取文件
  • ui->plainTextEdit->clear();//清空
  • while (!aStream.atEnd())
  • {
  • QString str=aStream.readLine();//讀取文件的一行
  • ui->plainTextEdit->appendPlainText(str); //添加到文本框顯示
  • fFileContent.append(str); //添加到 StringList
  • }
  • aFile.close();//關閉文件
  • ?
  • this->LabCurFile->setText("當前文件:"+aFileName);//狀態欄顯示
  • ui->actAppend->setEnabled(true); //更新Actions的enable屬性
  • ui->actInsert->setEnabled(true);
  • ui->actDelete->setEnabled(true);
  • ui->actSave->setEnabled(true);
  • ?
  • iniModelFromStringList(fFileContent);//從StringList的內容初始化數據模型
  • }
  • }
  • 這段代碼讓用戶選擇所需要打開的數據文本文件,然后用只讀和文本格式打開文件,逐行讀取其內容,將每行字符串顯示到界面上的 plainTextEdit 里,并且添加到一個臨時的 QStringList 類型的變量 fFileContent 里。

    然后調用自定義函數 iniModelFromStringList(),用 fFileContent 的內容初始化數據模型。下面是 iniModelFromStringList() 函數的代碼:

  • void MainWindow::iniModelFromStringList(QStringList& aFileContent)
  • { //從一個StringList 獲取數據,初始化數據Model
  • int rowCnt=aFileContent.count(); //文本行數,第1行是標題
  • theModel->setRowCount(rowCnt-1); //實際數據行數
  • //設置表頭
  • QString header=aFileContent.at(0);//第1行是表頭
  • //一個或多個空格、TAB等分隔符隔開的字符串, 分解為一個StringList
  • QStringList headerList=header.split(QRegExp("\\s+"),QString::SkipEmptyParts);
  • theModel->setHorizontalHeaderLabels(headerList); //設置表頭文字
  • ?
  • //設置表格數據
  • QString aText;
  • QStringList tmpList;
  • int j;
  • QStandardItem *aItem;
  • for (int i=1;i<rowCnt;i++)
  • {
  • QString aLineText=aFileContent.at(i); //獲取數據區的一行
  • //一個或多個空格、TAB等分隔符隔開的字符串, 分解為一個StringList
  • QStringList tmpList=aLineText.split(QRegExp("\\s+"),QString::SkipEmptyParts);
  • for (j=0;j<FixedColumnCount-1;j++) //tmpList的行數等于FixedColumnCount, 固定的
  • { //不包含最后一列
  • aItem=new QStandardItem(tmpList.at(j));//創建item
  • theModel->setItem(i-1,j,aItem); //為模型的某個行列位置設置Item
  • }
  • ?
  • aItem=new QStandardItem(headerList.at(j));//最后一列是Checkable,需要設置
  • //aItem=new QStandardItem();//最后一列是Checkable,設置
  • aItem->setCheckable(true); //設置為Checkable
  • //aItem->setTextAlignment(Qt::AlignHCenter);
  • if (tmpList.at(j)=="0")
  • aItem->setCheckState(Qt::Unchecked); //根據數據設置check狀態
  • else
  • aItem->setCheckState(Qt::Checked);
  • theModel->setItem(i-1,j,aItem); //為模型的某個行列位置設置Item
  • }
  • }
  • 傳遞來的參數 aFileContent 是文本文件所有行構成的 StringList,文件的每一行是 aFileContent 的一行字符串,第 1 行是表頭文字,數據從第 2 行開始。

    程序首先獲取字符串列表的行數,然后設置數據模型的行數,因為數據模型的列數在初始化時己經設置了。

    然后獲取字符串列表的第 1 行,即表頭文字,用 QString::split() 函數分割成一個 QStringList,設置為數據模型的表頭標題。

    QString::split() 函數根據某個特定的符號將字符串進行分割。例如,header 是數據列的標題, 每個標題之間通過一個或多個 TAB 鍵分隔,其內容是:

    測深(m) 垂深(m) 方位(°) 總位移(m) 固井質量 測井取樣

    那么通過上面的 split() 函數操作,得到一個字符串列表 headerList,其內容是:

    測深(m)
    垂深(m)
    方位(°)
    總位移(m)
    固井質量
    測井取樣

    也就是分解為一個 6 行的 StringList。然后使用此字符串列表作為數據模型,設置表頭標題的函數 setHorizontalHeaderLabels() 的參數,就可以為數據模型設置表頭了。

    同樣,在逐行獲取字符串后,也采用 split() 函數進行分解,為每個數據創建一個 QStandardltem 類型的項數據 altem,并賦給數據模型作為某行某列的項數據。

    QStandardItemModel 以二維表格的形式保存項數據,每個項數據對應著 QTableView 的一個單元格。項數據不僅可以存儲顯示的文字,還可以存儲其他角色的數據。

    數據文件的最后一列是一個邏輯型數據,在 tableView 上顯示時為其提供一個 CheckBox 組件,此功能通過調用 QStandardItem 的 setCheckable() 函數實現。

    數據修改

    當 TableView 設置為可編輯時,雙擊一個單元格可以修改其內容,對于使用 CheckBox 的列,改變 CheckBox 的勾選狀態,就可以修改單元格關聯項的選擇狀態。

    在實例主窗口工具欄上有“添加行”、“插入行”、“刪除行”按鈕,它們實現相應的編輯操作,這些操作都是直接針對數據模型的,數據模型被修改后,會直接在 TableView 上顯示出來。

    添加行

    “添加行”操作是在數據表的最后添加一行,其實現代碼如下:

  • void MainWindow::on_actAppend_triggered()
  • { //在表格最后添加行
  • QList<QStandardItem*> aItemList; //容器類
  • QStandardItem *aItem;
  • for(int i=0;i<FixedColumnCount-1;i++) //不包含最后1列
  • {
  • aItem=new QStandardItem("0"); //創建Item
  • aItemList<<aItem; //添加到容器
  • }
  • //獲取最后一列的表頭文字
  • QString str=theModel->headerData(theModel->columnCount()-1,Qt::Horizontal,Qt::DisplayRole).toString();
  • aItem=new QStandardItem(str); //創建 "測井取樣"Item
  • aItem->setCheckable(true);
  • aItemList<<aItem; //添加到容器
  • ?
  • theModel->insertRow(theModel->rowCount(),aItemList); //插入一行,需要每個Cell的Item
  • QModelIndex curIndex=theModel->index(theModel->rowCount()-1,0);//創建最后一行的ModelIndex
  • theSelection->clearSelection();//清空選擇項
  • theSelection->setCurrentIndex(curIndex,QItemSelectionModel::Select);//設置剛插入的行為當前選擇行
  • }
  • 使用 QStandardltemModel::insertRow() 函數插入一行,其函數原型是:

    void insertRow(int row, const QList<QStandardltem *> fiitems)

    其中,row 是一個行號,表示在此行號之前插入一行,若 row 等于或大于總行數,則在最后添加一行。QList<QStandardItem *>&items 是一個 QStandardltem 類型的列表類,需要為插入的一行的每個項數據創建一個 QStandardltem 類型的項,然后傳遞給 insertRow() 函數。

    在這段程序中,為前 5 列創建 QStandardItem 對象時,都使用文字“0”,最后一列使用表頭的標題,并設置為 Checkable。創建完每個項數據對象后,使用 insertRow() 函數在最后添加一行。

    插入行

    “插入行”按鈕的功能是在當前行的前面插入一行,實現代碼與“添加行”類似。

    刪除行

    “刪除行”按鈕的功能是刪除當前行,首先從選擇模型中獲取當前單元格的模型索引,然后從模型索引中獲取行號,調用 removeRow(int row) 刪除指定的行。

  • void MainWindow::on_actDelete_triggered()
  • { //刪除行
  • QModelIndex curIndex=theSelection->currentIndex () ;//獲取模型索引
  • if (curIndex. row () ==theModel->rowCount () -1) //最后一行
  • theModel->removeRow (curIndex.row () ) ; //刪除最后一行
  • else {
  • theModel->removeRow (curIndex.row () );//刪除一行,并重新設置當前選擇行
  • theSelection->setCurrentIndex (curIndex, QItemSelectionModel::Select);
  • }
  • }
  • 單元格格式設置

    工具欄上有 3 個設置單元格文字對齊方式的按鈕,還有一個設置字體粗體的按鈕。當在 TableView 中選擇多個單元格時,可以同時設置多個單元格的格式。例如,“居左”按鈕的代碼如下:

  • void MainWindow::on_actAlignLeft_triggered()
  • { //設置文字居左對齊
  • if (!theSelection->hasSelection())
  • return;
  • //獲取選擇的單元格的模型索引列表,可以是多選
  • QModelIndexList selectedIndex=theSelection->selectedIndexes();
  • for (int i=0;i<selectedIndex.count();i++)
  • {
  • QModelIndex aIndex=selectedIndex.at (i) ; //獲取一個模型索引
  • QStandardItem* aItem=theModel->itemFromIndex(aIndex);
  • aItem->setTextAlignment (Qt::AlignLeft) ;//設置文字對齊方式
  • }
  • }
  • QItemSelectionModel::selectedIndexes() 函數返回選擇單元格的模型索引列表,然后通過此列表獲取每個選擇的單元格的模型索引,再通過模型索引獲取其項數據,然后調用 QStandardItem::setTextAlignment() 設置一個項的對齊方式即可。

    “居中”和“居右”按鈕的代碼與此類似。

    “粗體”按鈕設置單元格的字體是否為粗體,在選擇單元格時,actFontBold 的 check 狀態根據當前單元格的字體是否為粗體自動更新。actFontBold 的 triggered(bool) 的槽函數代碼如下,與設置對齊方式的代碼操作方式類似:

  • void MainWindow::on_actFontBold_triggered(bool checked)
  • {//設置字體粗體
  • if (!theSelection->hasSelection())
  • return;
  • //獲取選擇單元格的模型索引列表
  • QModelIndexList selectedIndex=theSelection->selectedIndexes();
  • for (int i=0;i<selectedIndex.count();i++)
  • {
  • QModelIndex aIndex=selectedIndex.at(i); //獲取一個模型索引
  • QStandardItem* aItem=theModel->itemFromIndex(aIndex);//獲取項數據
  • QFont font=aItem->font(); //獲取字體
  • font.setBold(checked); //設置字體是否粗體
  • aItem->setFont(font); //重新設置字體
  • }
  • }
  • 數據另存為文件

    在視圖組件上對數據的修改都會自動更新到數據模型里,單擊工具欄上的“模型數據預覽” 按鈕,可以將數據模型的數據內容顯示到 PlainTextEdit 里。

    數據模型里的數據是在內存中的,工具欄上的“另存文件”按鈕可以將數據模型的數據另存 為一個數據文本文件,同時也顯示在 PlainTextEdit 里,其實現代碼如下:

    ?

    清理數據

    model_->removeRows(0,model_->rowCount());

    ?

    這樣清理數據,就不會影響到表格頭部的數據了。

  • void MainWindow::on_actSave_triggered()
  • { //保存為文件
  • QString curPath=QCoreApplication::applicationDirPath(); //獲取應用程序的路徑
  • //調用打開文件對話框選擇一個文件
  • QString aFileName=QFileDialog::getSaveFileName(this,tr("選擇一個文件"),curPath,
  • "井斜數據文件(*.txt);;所有文件(*.*)");
  • ?
  • if (aFileName.isEmpty()) //未選擇文件,退出
  • return;
  • ?
  • QFile aFile(aFileName);
  • if (!(aFile.open(QIODevice::ReadWrite | QIODevice::Text | QIODevice::Truncate)))
  • return; //以讀寫、覆蓋原有內容方式打開文件
  • ?
  • QTextStream aStream(&aFile); //用文本流讀取文件
  • ?
  • QStandardItem *aItem;
  • int i,j;
  • QString str;
  • ?
  • ui->plainTextEdit->clear();
  • ?
  • //獲取表頭文字
  • for (i=0;i<theModel->columnCount();i++)
  • {
  • aItem=theModel->horizontalHeaderItem(i); //獲取表頭的項數據
  • str=str+aItem->text()+"\t\t"; //以TAB見隔開
  • }
  • aStream<<str<<"\n"; //文件里需要加入換行符 \n
  • ui->plainTextEdit->appendPlainText(str);
  • ?
  • //獲取數據區文字
  • for ( i=0;i<theModel->rowCount();i++)
  • {
  • str="";
  • for( j=0;j<theModel->columnCount()-1;j++)
  • {
  • aItem=theModel->item(i,j);
  • str=str+aItem->text()+QString::asprintf("\t\t");
  • }
  • ?
  • aItem=theModel->item(i,j); //最后一列是邏輯型
  • if (aItem->checkState()==Qt::Checked)
  • str=str+"1";
  • else
  • str=str+"0";
  • ?
  • ui->plainTextEdit->appendPlainText(str);
  • aStream<<str<<"\n";
  • }
  • }
  • 刪除QWidget中的控件和清空QTableView表格內容用法

  • 本文主要總結刪除QWidget中的控件和清空QTableView表格內容用法,下面將詳細講述這兩種用法的實現方式。

    1.1刪除QWidget中的控件(函數removeWidget())

    要刪除QWidget中的控件,可以現在QWidget用QVBoxLayout布局,然后用QVBoxLayout::removeWidget(QWidget*)函數刪除指定名稱的控件,刪除后要用delete釋放空間,否則不會顯示出來。

    ?

    QVBoxLayout *m_VBoxLayout = new QVBoxLayout(this); QPushButton *m_button = QPushButton(QStringLiteral("按鈕")); m_VBoxLayout->addWidget(m_button); if(!m_VBoxLayout->isEmpty()) //如果垂直布局器中有控件,則執行刪除控件 { m_VBoxLayout->removeWidget(m_button); //刪除按鈕控件 delete m_button; //釋放控件 qDebug()<<m_VBoxLayout->isEmpty(); //判斷垂直布局是否為空 } ?

    1.2清空表格控件QTableView(函數clear())

    要清空表格控件QTableView,只需要清空模型項QStandItemModel的對象就行。只要用到函數QStandItemModel::clear()就可以了。下面代碼是一個清空QTabView表格的簡單用法。

    ?

    //初始化 QTableView m_TableView = new QTableView; QStandardItemModel *m_StandItemModel = new QStandardItemModel; m_TableView.setModel(m_StandItemModel); m_StandItemModel->clear(); //清空模型時,對應表格的內容會同步清空 ?

    1.3清空QTabView表格用法同樣適用于列表控件QListView、樹形控件QTreeView。

    ?

    總結:

    需要清空QWidget布局管理器中的控件,只需要用到函數QVBoxLayout::removeWidget(QWidget*)。

    要清空表格控件QTableView的內容,只需要用到函數QStandItemModel::clear()。

    Qt QTableView 如何清理列表里的數據

  • 數據初始化

    tableView_ = new QTableView();model_ = new QStandardItemModel();tableView_->setModel(model_);// model 初始化model_->setColumnCount(6);model_->setHeaderData(0, Qt::Horizontal, tr("序號"));model_->setHeaderData(1, Qt::Horizontal, tr("審核編號"));model_->setHeaderData(2, Qt::Horizontal, tr("審核狀態"));model_->setHeaderData(3, Qt::Horizontal, tr("含交易數"));model_->setHeaderData(4, Qt::Horizontal, tr("txid"));model_->setHeaderData(5, Qt::Horizontal, tr("操作"));// tableview 初始化tableView_->setSelectionBehavior(QAbstractItemView::SelectRows); // 選中整行tableView_->setSelectionMode(QAbstractItemView::SelectionMode::SingleSelection); // 只能單選tableView_->setEditTriggers(QTableView::EditTrigger::NoEditTriggers);tableView_->setAlternatingRowColors(true);tableView_->setColumnWidth(0, 100);tableView_->setColumnWidth(2, 80);tableView_->setColumnWidth(5, 130);tableView_->horizontalHeader()->setSectionResizeMode(0,QHeaderView::Interactive);tableView_->horizontalHeader()->setSectionResizeMode(1,QHeaderView::Stretch);tableView_->horizontalHeader()->setSectionResizeMode(4,QHeaderView::Stretch);#ifdef QT_DEBUGfor(int i = 0; i < 10; ++i) {QStandardItem *item = new QStandardItem();item->setCheckable(true);item->setText(QString::number(i));item->setCheckState(Qt::Unchecked);model_->setItem(i, 0, item);model_->setItem(i, 1, new QStandardItem("654654654"));model_->setItem(i, 2, new QStandardItem("admin"));model_->setItem(i, 3, new QStandardItem("admin"));model_->setItem(i, 4, new QStandardItem("admin"));model_->setItem(i, 5, new QStandardItem("admin"));} #elseonNextPage(0); #endif
  • ?
  • ?
  • 總結

    以上是生活随笔為你收集整理的qt中Qtableview的用法的全部內容,希望文章能夠幫你解決所遇到的問題。

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