我正在开发一个小程序,里面有很多面板。我想要它,以便当我聚焦到一个面板时,它会在它周围绘制一条细线以表明它已聚焦。除了我的 TreeView 之外,我的所有面板都可以使用它。
这是一个使用 QWidget
的例子:
void Test::paintEvent(QPaintEvent *event)
{
if(hasFocus())
{
QPainter painter(this);
QPen pen(Qt::blue);
pen.setWidth(1);
painter.setPen(pen);
painter.drawRect(geometry());
}
QWidget::paintEvent(event);
}
当我在 QTreeWidget
上使用 QPainter
时,我在控制台中收到了这些调试消息:
QWidget::paintEngine
:不应再调用QPainter::begin
:Paint 设备返回引擎 == 0,类型:1QPainter::setPen
:Painter 未激活QPainter::drawRects
:Painter 未激活
所以我的问题是我不能将QPainter
与QTreeWidget
一起使用,所以我无法绘制轮廓。我可以使用其他方法吗?
最佳答案
您根本不需要paintEvent
。仅使用样式表(setStyleSheet()
方法):
QTreeWidget:focus{ border: 1px solid red}
QTreeWidget:!focus{}
结果:
关于c++ - 使用 QPainter 在 QTreeWidget 上绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26956316/