笔者开启了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); // 未选中或没有焦点时的颜色}
主要含义是,判断有无焦点和有无选中,当获得焦点失去焦点或选中无选中都会改变颜色。