日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

QTableWidget与QTableView的区别

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

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中引入了模型/視圖框架來完成數據與表現的分離,這在Qt4中稱為InterView框架。

 

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

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

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

 

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

 

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

 

 

具體區別表格

區別點

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

View與Model綁定注意事項

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

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的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

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