QT - 拖动时的pixmap伪影

时间:2017-08-31 12:59:58

标签: c++ qt

我遇到了为拖动事件创建的pixmaps的问题。对于我派生的QGraphicsRectItem的拖动事件,我从该项创建了一个半透明的像素图。

在调试版本中,一切看起来都很好。

enter image description here

但是在发布版本中,拖动像素图有一些周期性和随机的伪像

enter image description here

这是代码:

QPixmap MyGraphicsRectItem::toPixmap() const
{
   QRect r = boundingRect().toRect();
   QPixmap pixmap(r.width(), r.height());
   QColor dragColor(color);
   dragColor.setAlphaF(0.5);

   QPainter painter;
   painter.begin(&pixmap);

   painter.fillRect(pixmap.rect(), dragColor);
   painter.setPen(Qt::white);

   QFont font("SegoeUI");
   font.setBold(true);

   painter.setFont(font);
   painter.drawText(pixmap.rect(), QString(" ") + textItem->toPlainText());

   if (pixItem != nullptr) {
       painter.setOpacity(0.5);
       painter.drawPixmap(pixItem->pos(), pixItem->pixmap());
   }

   painter.end();

   return pixmap;
}

这可能是一种记忆问题吗?

1 个答案:

答案 0 :(得分:1)

使用未初始化的数据初始化QPixmap。在Debug中,这通常设置为固定模式,但在Release中它是垃圾。

在使用之前,你应该用透明色填充像素图。

  

QPixmap :: QPixmap(int width,int height)

     

构造具有给定宽度和高度的像素图。如果宽度或高度为零,则构造空像素图。

     

警告:这将创建一个包含未初始化数据的QPixmap。调用fill()以使用适当的颜色填充像素图,然后使用QPainter进行绘制。

(来自Qt Docs