- QTableView与QTableWidget区别
- TableView只是显示,Model是数据,一个Table表格,一个是显示在表格当时没有数据管理,对于的数据管理在Miodel里面。而且QTableWidget继承了QTableView,还有Model的私有管理,QTableWidget是集成了MVC,不能单独设置数据模型
- 在显示复选框setCheckState方面,QTableView没有进行实现复选框,QTableWidget类中的setCheckState可以设置复选框;
- 在QSqlTableModel绑定方面,QTableView能够于QSqlTableModel进行绑定,但QTableWidget不能与QSqlTableModel进行绑定。
- QTableView的使用,new QTableView对象,QTableView对象设置model,model中设置数据
m_tableView = new QTableView(this);
m_tableView->setObjectName(QStringLiteral("tableView"));
m_tableView->setGeometry(QRect(90, 100, 541, 491));
m_model = new QStandardItemModel(this);
m_model->setItem(0, 0, new QStandardItem("张三"));
m_model->setItem(0, 1, new QStandardItem("3"));
m_model->setItem(0, 2, new QStandardItem("男"));
connect(m_model, SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &, const QVector<int> &)) ,
this, SLOT(slot_dataChanged(const QModelIndex &, const QModelIndex &, const QVector<int> &)));
m_tableView->setModel(m_model);
数据编辑改变使用model中dataChanged信号
void Widget::slot_dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles)
{
qDebug() << topLeft;
qDebug() << bottomRight;
qDebug() << m_model->data(topLeft) << " " << m_model->data(bottomRight);
}
- QTableView代理
改变View中的样式,跟数据无关,是改变显示的方式,所以是QTableView设置代理,不是model设置代理,SpinDelegate是自定义一个代理,如下,
m_tableView->setItemDelegate(new SpinDelegate(this));