1

QPixmapsに基づいてプロセスマネージャーを作成しようとしています。これらのピックスマップは、20Hzのタイマーコールバックを介して更新されるため、回転しているように見えます。

以下は私の現在のウィンドウのスクリーンショットです。

Pixmapスクリーンショット

ピックスマップは、[20][14]要素の2D配列です。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)。たぶん、他の作曲モードの1つがあなたに役立つでしょうか?特にQPainter::CompositionMode_ExclusionまたはQPainter::RasterOp_SourceXorDestination

テキストに補色を使用することもできます。マゼンタ(青+赤)は、カラーホイールの反対側の緑です。テキストをマゼンタにすると、おそらく黒と緑の両方に対してうまく表示されます。(見栄えが良くなるとは言っていませんが、見栄えが良くなるだけです。)または、テキストを50%グレーにして、輝度と色のコントラストを調整することもできますか?

また、アイコンは13個しかなく、14個ではありません。違いがあるかどうかはわかりません。

于 2013-01-24T14:52:07.030 に答える