【发布时间】:2014-11-16 11:15:25
【问题描述】:
我正在开发一个小程序,里面有一堆面板。我想要它,这样当我聚焦到一个面板时,它会在它周围画一条细线以表明它是聚焦的。除了树视图之外,我的所有面板都可以使用它。
这是一个使用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: 绘制设备返回引擎 == 0,类型:1 -
QPainter::setPen: 画家不活跃 -
QPainter::drawRects: 画家不活跃
所以我的问题是我不能将QPainter 与QTreeWidget 一起使用,所以我无法画出我的轮廓。我可以使用其他方法吗?
【问题讨论】:
-
为什么不在
QTreeWidget中使用paintEvent?可以调用QTreeWidget::paintEvent(event)进行超类的绘制 -
这就是我已经在做的事情。我总是在绘画事件中调用超类,但是我确实忘记将它添加到给定的示例中。但这无论如何都不是我的问题。我的问题是我需要围绕 QTreeWidget 的几何图形绘制一个矩形,而仅通过调用超类就无法做到这一点。我需要像 QPainter 之类的东西......
-
为什么你不能创建一个
QPainter呢?QTreeWidget应该是QWidget的子类 ...顺便说一句,您应该在if之外添加QWidget::paintEvent(event) -
试试看,你就会明白为什么。我不知道为什么它不会让我,但我在调试输出中得到这些消息。我会将它们添加到问题中
-
您可以尝试创建自己的小部件并将
QTreeWidget添加到其中,应该可以,但我不知道这是否是最佳选择
标签: c++ qt qpainter qtreewidget