前几天遇到这个方面的问题,在网上搜索了下,并没有找到很好的解答方法。后来做出来了,分享给大家。
QTableView的单元格内容实现还是继承了 TableViewModel类的 data( const QModelIndex &index, int role) const函数,那个设置颜色的问题也就在这个里面实现了。
QTableView的单元格内容实现还是继承了 TableViewModel类的 data( const QModelIndex &index, int role) const函数,那个设置颜色的问题也就在这个里面实现了。
1、设置某个单元格颜色
QVariant TableViewModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();
if (index.row() >= fEntries.size() || index.row() < 0)
return QVariant();
if(role == Qt::DisplayRole) {
const Entry& entry = fEntries.at(index.row());
const QString& key = getColumnId(index.column());
return entry.value(key);
}
return QVariant();
}
我这个上面其实是有两种状态,根据里面的内容来显示颜色的变化,单元格的锁定时(index.column()和index.row()).
既然能锁定某个单个元格,那个锁定某一行或者一列也很简单。
2、设置某行颜色
QVariant TableViewModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();
if (index.row() >= fEntries.size() || index.row() < 0)
return QVariant();
if(role == Qt::DisplayRole) {
const Entry& entry = fEntries.at(index.row());
const QString& key = getColumnId(index.column());
return entry.value(key);
}
return QVariant();
}
3、设置某列颜色
QVariant TableViewModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();
if (index.row() >= fEntries.size() || index.row() < 0)
return QVariant();
if(role == Qt::DisplayRole) {
const Entry& entry = fEntries.at(index.row());
const QString& key = getColumnId(index.column());
return entry.value(key);
}
column
return QVariant();
}