• 6290阅读
  • 6回复

QTableView 根据表项值设置颜色 [复制链接]

上一主题 下一主题
离线wang441700
 
只看楼主 倒序阅读 楼主  发表于: 2012-11-21
关键词: tableview颜色

比如根据(1,1)单元格值 设置颜色,值==2时,置单元格为红。
因为要操作数据,所以视图得和QSqlTableModel关联,只能用QTableView 不能用QtableWidget类。
但QTableView 却没有设置单元格颜色的方法。
网上介绍重写data()
QVariant QSqlTableModel::data(const QModelIndex &index, int role) const
{
    if (role == Qt::TextColorRole && index.item(1,1)== 2)  // 根据(1,1)单元格值 设置颜色
        return qVariantFromValue(QColor(Qt::red));    
return value;
}
此方法根本不行。此时根本找不到对应item的值。程序出错
难道QTableView  没有此功能实现?怎么实现呢?
离线alexltr

只看该作者 1楼 发表于: 2012-11-22
value在哪裡?
我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线wang441700
只看该作者 2楼 发表于: 2012-11-25
回 1楼(alexltr) 的帖子
这个只是截取了部分代码
主要是index.item(1,1)== 2。data里面不能有取值的任何操作,不然就报错。请问还有其他方法么?一般怎么实现了
离线wang441700
只看该作者 3楼 发表于: 2012-11-25
回 1楼(alexltr) 的帖子
value 那行注释掉就行了,调试时加的
离线alexltr

只看该作者 4楼 发表于: 2012-11-25
  1.    if (role == Qt::ForegroundRole && index.item(1,1)== 2)  
  2.         return Qt::red;  

Qt::TextColorRole9This role is obsolete. Use ForegroundRole instead.

我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线alexltr

只看该作者 5楼 发表于: 2012-11-25
index.item(1,1)== 2 ????
这个也有问题吧?QModelIndex好像没有item()这个东西吧?
我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线alexltr

只看该作者 6楼 发表于: 2012-11-25
回 2楼(wang441700) 的帖子
你可以这样取值:
int value = QSqlTableModel::data(createIndex(1,1),Qt::EditRole).toInt();

if (role == Qt::ForegroundRole && value== 2)  
        return Qt::red;  

我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
快速回复
限100 字节
 
上一个 下一个