2017-08-31 28 views
0

我有一個爲拖拽事件創建的pixmaps的問題。對於我派生的QGraphicsRectItem的拖動事件,我從該項目創建一個半透明的像素圖。QT - 關於拖拽的pixmap文物

在調試版本中,一切看起來都很好。

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

使用未初始化的數據初始化QPixmap。在調試中,這通常設置爲固定模式,但在發佈中它是垃圾。

在使用它之前,您應該使用透明顏色填充像素圖。

的QPixmap ::的QPixmap(INT寬度,INT高度)

構造具有給定寬度和高度的象素圖。如果寬度或高度爲零,則構造空像素圖。

警告:這將創建一個包含未初始化數據的QPixmap。在用QPainter繪製它之前,調用fill()以使用適當的顏色填充像素圖。

(從Qt Docs

+0

RTFM ...謝謝你,現在一切看起來它應該的樣子。 – RobRobRob