【已解决】c++ qt选中该行为什么该列部分变色

笔者开启了QTableView中交替行改变颜色,发现笔者自定义绘制的水平滚动条,在选中后不发生颜色改变,这让笔者很疑惑。笔者查阅资料后发现,自定义绘制的控件,要自身设置颜色。当笔者解决了这个问题时,顺手就将这个问题的解决方案记录在此

问题来源

c++ qt中表格中含有自定义绘制部件,当表格该行选中时,自定义控件却未发生背景颜色改变。出现了问题

问题未解决前

【已解决】c++ qt选中该行为什么该列部分变色_第1张图片

问题解决后

【已解决】c++ qt选中该行为什么该列部分变色_第2张图片

问题解决方案

在paint绘制函数中,增加这段代码。

bool isSelected = option.state & QStyle::State_Selected;
		bool hasFocus = option.state & QStyle::State_HasFocus;
		if (isSelected || hasFocus) {
			painter->fillRect(option.rect, QColor(240, 240, 240)); // 选中或有焦点时的颜色
		}
		else {
			QColor backgroundColor;
			if (index.row() % 2 == 0) {
				backgroundColor = QColor(255, 255, 255); // 偶数行
			}
			else {
				backgroundColor = QColor(244, 246, 248); // 奇数行
			}
			painter->fillRect(option.rect, backgroundColor); // 未选中或没有焦点时的颜色
		}

主要含义是,判断有无焦点和有无选中,当获得焦点失去焦点或选中无选中都会改变颜色。

你可能感兴趣的:(QT,c++,qt,开发语言)