QTableWidget與QTableView的區別

來源:互聯網
上載者:User

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還提供了更為便捷的類來處理常見的一些資料模型。他們將模型和視圖合一,便於處理一些常規的資料類型。使用這些類型雖然簡單方便,但也失去了模型視圖結構的靈活性,所以要根據具體情況來選擇。

 

 

具體區別表格

區別點

QTableView QTableWidget
繼承關係   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)));
    }
}

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.