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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

QTableWidget与QTableView的区别

發(fā)布時間:2025/3/15 c/c++ 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QTableWidget与QTableView的区别 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

QTableWidget繼承自QTableView。QSqlTableModel能與QTableView綁定,但不能于QTableWidget綁定。

QSqlTableModel *model = new QSqlTableModel;
model->setTable("employee");
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->select();
model->removeColumn(0); // don't show the ID
model->setHeaderData(0, Qt::Horizontal, tr("Name"));
model->setHeaderData(1, Qt::Horizontal, tr("Salary"));

QTableView?*view = new?QTableView;
view->setModel(model);
view->show();

模型視圖結構

Qt4中引入了模型/視圖框架來完成數(shù)據(jù)與表現(xiàn)的分離,這在Qt4中稱為InterView框架。

 

MVC設計模式是起源于Smalltalk的一種與用戶界面相關的設計模式。MVC包括三個元素:模型(Model)表示數(shù)據(jù),視圖(View)是用戶界面,控制(Controler)定義了用戶在界面上的操作。通過使用MVC模式,有效的分離了數(shù)據(jù)和用戶界面,使得設計更為靈活,更能適應變化。

模型:所有的模型都基于QAbstractItemModel類,該類是抽象基類。

視圖:所有的視圖都從抽象基類QAbstractItemView繼承。

 

Interview框架提供了一些常見的模型類和視圖類,例如QStandardItemModel,QDirModel,QStringListModel和QColumnView,QHeaderView,QListView,QTableView,QTreeView。

 

相對于使用現(xiàn)有的模型和視圖,Qt還提供了更為便捷的類來處理常見的一些數(shù)據(jù)模型。他們將模型和視圖合一,便于處理一些常規(guī)的數(shù)據(jù)類型。使用這些類型雖然簡單方便,但也失去了模型視圖結構的靈活性,所以要根據(jù)具體情況來選擇。

 

 

具體區(qū)別表格

區(qū)別點

QTableViewQTableWidget
繼承關系?QTableWidget繼承自QTableView
使用數(shù)據(jù)模型setModel可以使用setModel設置數(shù)據(jù)模型setModel是私有函數(shù),不難使用該函數(shù)設置數(shù)據(jù)模型
顯示復選框setCheckState沒有函數(shù)實現(xiàn)復選框QTableWidgetItem類中的setCheckState(Qt::Checked);可以設置復選框
與QSqlTableModel綁定QTableView能與QSqlTableModel綁定QTableWidget能與QSqlTableModel綁定
???
???

View與Model綁定注意事項

但視圖與模型綁定時,模型必須使用new來創(chuàng)建。否則視圖不能隨著模型的改變而改變。

Eorror錯誤的寫法

QStandardItemModel model(4,2);


model.setHeaderData(0, Qt::Horizontal, tr("Label"));
model.setHeaderData(1, Qt::Horizontal, tr("Quantity"));


ui.tableView->setModel(&model);

for (int row = 0; row < 4; ++row) {
????for (int column = 0; column < 2; ++column) {
????????QModelIndex index = model.index(row, column, QModelIndex());
????????model.setData(index, QVariant((row+1) * (column+1)));
????}
}

?

Right 正確的寫法

QStandardItemModel *model;

model = new QStandardItemModel(4,2);
ui.tableView->setModel(model);

model->setHeaderData(0, Qt::Horizontal, tr("Label"));
model->setHeaderData(1, Qt::Horizontal, tr("Quantity"));

for (int row = 0; row < 4; ++row) {
????for (int column = 0; column < 2; ++column) {
????????QModelIndex index = model->index(row, column, QModelIndex());
????????model->setData(index, QVariant((row+1) * (column+1)));
????}
}

?

總結

以上是生活随笔為你收集整理的QTableWidget与QTableView的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

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