2013-01-24 45 views
1

我試圖創建一個基於QPixmaps的進程管理器。這些像素圖通過20Hz的定時器回調進行更新,因此看起來像是在旋轉。Qt Pixmap操作

下面是我當前窗口的屏幕截圖。

Pixmap screenshot http://i47.tinypic.com/y5g4.png

的象素圖是一個二維陣列,[20] [14]的元素。 20是時間片的數量,14是過程狀態指示器。我知道,屏幕上只顯示13個。

我目前使用的畫家對象和組成方式添加QImages連同下面的代碼:

QImage textImage(mapIcon.size(), QImage::Format_ARGB32); 
QImage resultImage(mapIcon.size(), QImage::Format_ARGB32); 

QPainter textPainter(&textImage); 

textPainter.setCompositionMode(QPainter::CompositionMode_Source); 
textPainter.fillRect(mapIcon.rect(), Qt::black); 
textPainter.setCompositionMode(QPainter::CompositionMode_SourceOver); 
textPainter.setFont(QFont("Arial", 8, QFont::Bold)); 
textPainter.setPen(QPen(Qt::white)); 
textPainter.drawText(QRectF(0, 0, mapIcon.width(), mapIcon.height()), 
    Qt::AlignCenter, name); 
textPainter.end(); 

QPainter resultPainter(&resultImage); 
resultPainter.setCompositionMode(QPainter::CompositionMode_Source); 
resultPainter.drawImage(0, 0, mapIcon); 
resultPainter.setCompositionMode(QPainter::CompositionMode_Exclusion); 
resultPainter.drawImage(0, 0, textImage); 

resultPainter.setRenderHint(QPainter::SmoothPixmapTransform, true); 
resultPainter.setRenderHint(QPainter::HighQualityAntialiasing, true); 

runnerIcons[x][y] = QPixmap::fromImage(resultImage); 

我的問題是:我不希望看到的倒配色方案綠色標籤,我想要那種顏色黑色。黑色的白色是好的,但洋紅色不是我最喜歡的。

這在Qt中可能嗎?或者也許你會對替代解決方案有一些建議?

在此先感謝。

回答

1

有幾件事你可以做。您可以查看QPainter::setCompositionMode (mode)方法。也許其他合成模式之一對你有用?特別是QPainter::CompositionMode_ExclusionQPainter::RasterOp_SourceXorDestination

您也可以使用免費的顏色作爲文字。品紅色(藍色+紅色)在色輪上呈綠色。如果您製作洋紅色的文字,它可能對黑色和綠色都很好。 (我並不是說它看起來很棒 - 只是表現的很好。)或者,也許你可以使文本呈現50%的灰度,以便亮度和顏色有對比。

此外,你只有13個圖標,而不是14.不知道它是否有任何區別。

+0

嗨,我用你的建議,並得到了部分解決方案。請查看我更新的問題。最好的祝福。 –

+0

那麼,另一種方法是使用[剪輯路徑](http://doc.qt.digia.com/qt/qpainter.html#setClipPath)或[剪輯區域](http:// doc。 qt.digia.com/qt/qpainter.html#setClipRegion)來遮蓋綠色部分,以白色繪製文本,然後遮住黑色部分並以黑色繪製文本。 – user1118321