从6月出开始学习,在CSDN找到不少有用的代码,在做的项目需要对widget鼠标单击选中后边框颜色更改表示选中。
1)自己想的是选中后将widget样式变更,就是widget的border属性变为选中颜色;
2)根据大神feiyangqingyun的开源代码分析出来的,就是painterEvent事件对所有控件重绘,通过焦点区分控件边框颜色;
代码如下,仅供参考:
void FormObj::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.setRenderHints(QPainter::Antialiasing);
//绘制边框
drawBorder(&painter);
}
void FormObj::drawBorder(QPainter *painter)
{
painter->save();
QPen pen;
pen.setWidth(borderWidth);
pen.setColor(hasFocus() ? focusColor : bgColor);
//边框宽度=0则不绘制边框
painter->setPen(borderWidth == 0 ? Qt::NoPen : pen);
//顺带把背景颜色这里也一并处理
// if (bgColor != Qt::transparent) {
// painter->setBrush(bgColor);
// }
painter->drawRect(rect());
painter->restore();
}
3)还是根据神feiyangqingyun的开源代码得出,可以通过控件焦点,通过样式聚焦时边框颜色变化显示被选中。例如:
QWidget{border:2px solid black;}
QWidget:focus{border:2px solid blue;}
注意,所有QWidget空间应该设置focusPolicy为StrongFocus;还有QWidget控件如果有布局的话,注意留边框距。