QTableView
http://qt-project.org/doc/qt-4.8/qtableview.html
viewM = new QTableView(this);
viewM->setModel(model); //设置model to see:http://qt-project.org/doc/qt-4.8/model-view-programming.html
viewM->setMouseTracking(true); //获取鼠标消息
viewM->horizontalHeader()->setVisible(false); //水平头不显示
viewM->verticalHeader()->setVisible(false);
viewM->setEditTriggers(QAbstractItemView::NoEditTriggers); //禁止编辑
viewM->setSelectionMode(QAbstractItemView::SingleSelection); //可以单选
viewM->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); //关闭滚动条
viewM->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
viewM->setAutoScroll(false);
viewM->setAlternatingRowColors(true);
connect(viewM,SIGNAL(entered(const QModelIndex)),this,SLOT(entered(const QModelIndex)));
for(int row = 0; row < ROWS; ++row)
{
viewM->setRowHeight(row,40);
viewM->setColumnWidth(row,60);
}
从QAbstractTableModel继承的类要重载以下三个函数。
int rowCount(const QModelIndex &parent) const{return 10};
int columnCount(const QModelIndex &parent) const{return 10;};
QVariant data(const QModelIndex &index, int role) const{return "demo"};
还有,当向model写数据时,有时不能立即刷新。比如向某个单元格写一个数据,希望view马上就可以显示出来。我找到的方法就是让model 发出signal
重载model的setData(),当数据更新完成后,emit dataChanged(index,index);
bool Q3TTableModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
if(Qt::DisplayRole == role)
{
Marker marker = boardM->CellAt(index.row(),index.column());
if(None==marker)
{
boardM->setCellAt(index.row(),index.column(),static_cast<Marker>(value.toInt()));
emit dataChanged(index,index);
return TestForWinning(Position(index.row(),index.column()));
//return true;
}
}
return false;
}