1

我正在尝试创建一个基于 QPixmaps 的进程管理器。这些像素图通过 20Hz 的计时器回调进行更新,因此看起来它们正在旋转。

下面是我当前窗口的屏幕截图。

像素图截图

像素图是具有 [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中可能吗?或者,也许你会对替代解决方案有一些建议?

提前致谢。

4

1 回答 1

1

您可以做几件事。你可以看看QPainter::setCompositionMode (mode)方法。也许其他一种构图模式对您有用?特别是QPainter::CompositionMode_ExclusionQPainter::RasterOp_SourceXorDestination

您还可以为文本使用互补色。洋红色(蓝色+红色)在色轮上与绿色相反。如果您将文本设为洋红色,它可能会很好地显示黑色和绿色。(我并不是说它看起来很棒——只是它会很好地显示出来。)或者你可以将文本设置为 50% 灰色,以便在亮度和颜色上产生对比?

此外,您只有 13 个图标,而不是 14 个。不确定它是否有任何区别。

于 2013-01-24T14:52:07.030 回答