QStandardItemModel中设置项目的背景颜色

如何根据内容显示不同的背景颜色?

参照ECMWF的Metview源码实现。

Qt的Model中不同类型的数据用role区分,Qt的宏ItemDataRole提供了一些角色:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

enum ItemDataRole {

DisplayRole = 0,

DecorationRole = 1,

EditRole = 2,

ToolTipRole = 3,

StatusTipRole = 4,

WhatsThisRole = 5,

// Metadata

FontRole = 6,

TextAlignmentRole = 7,

BackgroundColorRole = 8,

BackgroundRole = 8,

TextColorRole = 9,

ForegroundRole = 9,

CheckStateRole = 10,

// Accessibility

AccessibleTextRole = 11,

AccessibleDescriptionRole = 12,

// More general purpose

SizeHintRole = 13,

InitialSortOrderRole = 14,

// Internal UiLib roles. Start worrying when public roles go that high.

DisplayPropertyRole = 27,

DecorationPropertyRole = 28,

ToolTipPropertyRole = 29,

StatusTipPropertyRole = 30,

WhatsThisPropertyRole = 31,

// Reserved

UserRole = 32

};

也可以自定义角色,只要数值大于UserRole即可。

1

2

3

4

5

6

enum ImageNavigtionModelRole{

CachedImageRole = Qt::UserRole + 100,

ImageMetaDataRole = Qt::UserRole +200

};

Qt的Model使用data函数、setData函数来获取和设置各种角色的具体数值。当我们需要修改背景颜色时,可以修改BackgroundColorRole角色的返回数据:

C++

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

QVariant ImageNavigationModel::data(const QModelIndex &index, int role) const

{

if(role == Qt::BackgroundRole)

{

QStandardItem* node = itemFromIndex(index.sibling(index.row(),0)); // 每行颜色均相同

QVariant cached_image_role = node->data(CachedImageRole);

if(!cached_image_role.isNull())

{

if(index.row()%2 == 0)

return QColor("#FFE6BF");

else

return QColor("#FFF2DE");

}

else

{

return QStandardItemModel::data(index, role);

}

}

return QStandardItemModel::data(index, role);

}

这样就可以自定义数据的背景色。

时间: 2024-10-14 14:29:22

QStandardItemModel中设置项目的背景颜色的相关文章

xml中设置button的背景颜色

在画几个设置界面,用到了button控件,对于button空间的背景色在不同状态下的颜色改变方法,做了一下尝试,发现了两种背景颜色改变的方法,就总结了下. 方法一尝试了好多遍才好,要点在于,在selector中android:drawable="@drawable/button_focus"引号中为xml文件,此xml文件为color类型,且在此color xml文件中 <color xmlns:android="http://schemas.android.com/a

android在代码中四种设置控件背景颜色的方法(包括RGB)

转载请注明出处: http://blog.csdn.net/fth826595345/article/details/9208771  TextView tText=(TextView) findViewById(R.id.textv_name); //第1种: tText.setTextColor(android.graphics.Color.RED);//系统自带的颜色类 // 第2种: tText.setTextColor(0xffff00ff);//0xffff00ff是int类型的数据

[]如何在Windows 10中更改文件夹背景颜色

ini文件.我们甚至可以使用相同的技术将图片设置为文件夹背景. 已有工具可以更改Windows 7中Windows资源管理器背景的颜色,并将图像设置为Windows 7中的文件夹背景,但这些工具与Windows 8引入的新文件管理器不兼容. 由于某些原因,这些文件夹背景更改工具在Windows 10和Windows 8/8中不起作用.1.自从Windows 10发布以来,用户一直在要求我们提出一种将图片设置为文件夹背景或至少更改文件夹背景颜色的方法,我们决定提出本指南. 如果您在Windows

[转]如何在Windows 10中更改文件夹背景颜色

ini文件.我们甚至可以使用相同的技术将图片设置为文件夹背景. 已有工具可以更改Windows 7中Windows资源管理器背景的颜色,并将图像设置为Windows 7中的文件夹背景,但这些工具与Windows 8引入的新文件管理器不兼容. 由于某些原因,这些文件夹背景更改工具在Windows 10和Windows 8/8中不起作用.1.自从Windows 10发布以来,用户一直在要求我们提出一种将图片设置为文件夹背景或至少更改文件夹背景颜色的方法,我们决定提出本指南. 如果您在Windows

设置 tableview 的背景 颜色 和清空

表示图中Cell默认是不透明的,那么在设置表示图的背景颜色和图片时通常是看不到的 1.给tableView设置背景view UIImageView *backImageView=[[UIImageViewalloc]initWithFrame:self.view.bounds]; [backImageView setImage:[UIImage imageNamed:@"liaotianbeijing"]]; self.tableView.backgroundView=backImag

linux BASH shell下设置字体及背景颜色

BASH shell下设置字体及背景颜色 echo -e "\e[31mtest\e[41m" \e[30m 将字符的显示颜色改为黑色 \e[31m 将字符的显示颜色改为红色 \e[32m 将字符的显示颜色改为绿色 \e[33m 将字符的显示颜色改为淡红色 \e[34m 将字符的显示颜色改为蓝色 \e[35m 将字符的显示颜色改为紫色 \e[36m 将字符的显示颜色改为淡蓝色 \e[37m 将字符的显示颜色改为灰色 \e[40m -- \e[47m 设置背景色 \e[40m 将背景色设

设置Delphi IDE背景颜色为全黑色,类似VS2017 深色

使用Delphi IDE Colorizer 设置Delphi IDE背景颜色.效果如下 插件下载地址 http://download.csdn.net/detail/liangchua/9673553

制作由下向上的滚动字幕,字幕内容要求包含网站超级链接和图片超级链接, 使用鼠标移动事件控制字幕运动和停止。 2、在下拉列表框中设置五种以上颜色,选择颜色后, 滚动字幕背景色改变成相应颜色

<!DOCTYPE html><html>    <head>        <meta charset="UTF-8">        <title></title>    </head>    <!--        时间:2016-12-28        描述:1.制作由下向上的滚动字幕,字幕内容要求包含网站超级链接和图片超级链接,                   使用鼠标移动事件控制

用图片来设置View的背景颜色(结合Quartz2D)

         UIImage *oldImage = [UIImage imageNamed:@"car"];          //旧图片的尺寸和View不匹配,使用Quartz2D生成新图片     UIGraphicsBeginImageContextWithOptions(self.view.frame.size, NO, 0.0);     [oldImage drawInRect:self.view.bounds];     UIImage *newImage = UI