• 14689阅读
  • 6回复

qtableview如何设置单元格的背景颜色? [复制链接]

上一主题 下一主题
离线cyesh
 
只看楼主 倒序阅读 楼主  发表于: 2009-09-03
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
如题,希望设置了颜色后即使修改了单元格内容也不会改变背景颜色。

如果可以一次设置整列、整行的背景颜色也可以。
离线yooi
只看该作者 1楼 发表于: 2009-09-03
你可以用setStyleSheet 自行加入CSS的style
离线cyesh
只看该作者 2楼 发表于: 2009-09-04
1楼:应该是qss吧,可以说一下具体怎么做么?

另外,之前论坛里有人说是要在子类化model时在setdata函数中通过role参数进行实现,不知是否可行?还有,role是怎么用的?
离线cyesh
只看该作者 3楼 发表于: 2009-10-12
哟,过了一个月自己把问题解决了:(

大概的方法就是要为某个单元格的数据实现一个保存本单元格Qt.BackgroundRole值的方式,在此基础上有2种选择:

1、常规的方法:在子类化Moel时重载data/setData函数,在函数中判定当role==Qt.BackgroundRole时,data返回保存的本单元格指定颜色的QColor对象;而setData函数就是把指定的颜色保存在本单元格数据中。

这种方法通常应该自定义单元格数据的类,类成员除了文本数据还应该包括颜色数据。

2、可用但不太常用的方法:重载QtableView的painEvent函数,或者重载Delegate的paint函数。这种方法要在函数中判定某个单元格的颜色,并对QBrush等画图工具作出不同设置,从而达到为某个单元格“画”不同背景的效果。

通常可以在Model中保存一个列表,列表记录了背景不同的单元格,而QtableView或Delegate则通过判定单元格是否在列表中来设置不同的画图工具。

我是用PyQt4实现的,C++的没试过,应该也一样吧?
离线cyesh
只看该作者 4楼 发表于: 2009-10-12
另外,qss貌似是实现控件整体效果的,与某个单元格的背景没关系?
离线lisuzhen929
只看该作者 5楼 发表于: 2010-03-10
现在我也要做差不多这个功能的东西,是把值设置了以后这个底色要变两下,再变成原样,请问楼主是怎么做的呀,可不可以把具体的解决方法发给我呀,邮箱是lisuzhen929@126.com,期待你的回复
离线lisuzhen929
只看该作者 6楼 发表于: 2010-03-10
我已经找到方法了,就是试你上面所提示的就可以了,谢谢
快速回复
限100 字节
 
上一个 下一个