QTableWidget继承自QTableView。QSqlTableModel能与QTableView绑定,但不能于QTableWidget绑定。
1. QSqlTableModel *model = new QSqlTableModel; 2. model->setTable("employee"); 3. model->setEditStrategy(QSqlTableModel::OnManualSubmit); 4. model->select(); 5. model->removeColumn(0); // don't show the ID 6. model->setHeaderData(0, Qt::Horizontal, tr("Name")); 7. model->setHeaderData(1, Qt::Horizontal, tr("Salary")); 8. 9. QTableView *view = new QTableView; 10. view->setModel(model); 11. view->show();
QTableWidget是QT程序中常用的显示数据表格的空间,很类似于VC、C#中的DataGrid。说到QTableWidget,就必须讲一下它跟QTabelView的区别了。
QTableWidget是QTableView的子类,主要的区别是QTableView可以使用自定义的数据模型来显示内容(也就是先要通过setModel来绑定数据源),而QTableWidget则只能使用标准的数据模型,并且其单元格数据是QTableWidgetItem的对象来实现的(也就是不需要数据源,将逐个单元格内的信息填好即可)。这主要体现在QTableView类中有setModel成员函数,而到了QTableWidget类中,该成员函数变成了私有。使用QTableWidget就离不开QTableWidgetItem。QTableWidgetItem用来表示表格中的一个单元格,正个表格都需要用逐个单元格构建起来。
具体区别表格
区别点 | QTableView | QTableWidget |
---|---|---|
继承关系 | QTableWidget继承自QTableView | |
使用数据模型setModel | 可以使用setModel设置数据模型 | setModel是私有函数,不难使用该函数设置数据模型 |
显示复选框setCheckState | 没有函数实现复选框 | QTableWidgetItem类中的setCheckState(Qt::Checked);可以设置复选框 |
与QSqlTableModel绑定 | QTableView能与QSqlTableModel绑定 | QtableWidget不能与QSqlTableModel绑定 |
View与Model绑定注意事项
但视图与模型绑定时,模型必须使用new来创建。否则视图不能随着模型的改变而改变。
Eorror错误的写法
1. QStandardItemModel model(4,2); 2. 3. 4. model.setHeaderData(0, Qt::Horizontal, tr("Label")); 5. model.setHeaderData(1, Qt::Horizontal, tr("Quantity")); 6. 7. 8. ui.tableView->setModel(&model); 9. 10. for (int row = 0; row < 4; ++row) { 11. for (int column = 0; column < 2; ++column) { 12. QModelIndex index = model.index(row, column, QModelIndex()); 13. model.setData(index, QVariant((row+1) * (column+1))); 14. } 15. } 16.
Right 正确的写法
1. QStandardItemModel *model; 2. 3. model = new QStandardItemModel(4,2); 4. ui.tableView->setModel(model); 5. 6. model->setHeaderData(0, Qt::Horizontal, tr("Label")); 7. model->setHeaderData(1, Qt::Horizontal, tr("Quantity")); 8. 9. for (int row = 0; row < 4; ++row) { 10. for (int column = 0; column < 2; ++column) { 11. QModelIndex index = model->index(row, column, QModelIndex()); 12. model->setData(index, QVariant((row+1) * (column+1))); 13. } 14. } 15.