自学内容网 自学内容网

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

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

问题来源

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

问题未解决前

在这里插入图片描述

问题解决后

在这里插入图片描述

问题解决方案

在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); // 未选中或没有焦点时的颜色
}

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


原文地址:https://blog.csdn.net/m0_37149062/article/details/136028232

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!