Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用QPainter在QTreeWidget上绘制_C++_Qt_Qpainter_Qtreewidget - Fatal编程技术网

C++ 使用QPainter在QTreeWidget上绘制

C++ 使用QPainter在QTreeWidget上绘制,c++,qt,qpainter,qtreewidget,C++,Qt,Qpainter,Qtreewidget,我正在做一个小程序,里面有很多面板。我希望这样,当我聚焦到一个面板上时,它会在面板周围画一条细线,表明它是聚焦的。除了我的树视图,我的所有面板都可以使用它 下面是一个使用QWidget的示例: void Test::paintEvent(QPaintEvent *event) { if(hasFocus()) { QPainter painter(this); QPen pen(Qt::blue); pen.setWidth(1)

我正在做一个小程序,里面有很多面板。我希望这样,当我聚焦到一个面板上时,它会在面板周围画一条细线,表明它是聚焦的。除了我的树视图,我的所有面板都可以使用它

下面是一个使用
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
    :不应再调用
  • qPaint::begin
    :绘制设备返回的引擎==0,类型:1
  • QPainter::setPen
    :画师未激活
  • qPaint::drawRects
    :绘制程序未激活

因此,我的问题是我无法将
QPainter
QTreeWidget
一起使用,因此我无法绘制轮廓。我可以使用其他方法吗?

您根本不需要
paintEvent
。仅使用样式表(
setStyleSheet()
method):

结果:


为什么不在
QTreeWidget
中使用
paintEvent
?您可以调用
QTreeWidget::paintEvent(event)
来执行超类的绘制,这正是我正在做的。我总是在paint事件中调用超类,但是我确实忘记了将其添加到给定的示例中。但这不是我的问题。我的问题是,我需要围绕QTreeWidget的几何体绘制一个矩形,而这不能通过调用超类来完成。我需要一个QPainter之类的东西……为什么你不能创建一个
QPainter
QTreeWidget
应该是
QWidget
的子类。。。顺便说一句,您应该在
之外添加
QWidget::paintEvent(event)
,如果
尝试一下,您就会明白原因。我不知道为什么它不允许我,但我在调试输出中得到了这些消息。我会将它们添加到问题中。您可以尝试创建自己的小部件,并将
QTreeWidget
添加到其中,这应该会起作用,但我不知道这是否是最佳选择
QTreeWidget:focus{ border: 1px solid red}
QTreeWidget:!focus{}