影付きのQTテキスト
-
28-10-2019 - |
質問
外観がわずかにわずかであるにもかかわらず、他のアプリケーションでこれを見ますが、効果は非常に高いコントラスト - >より良い読みやすさです。
たとえば、QTデザイナーの左側のタブ、またはAdobe Photoshopの上部にあるタブ:テキストには何らかの影があり、対照的な色のテキストを囲む1ピクセルしかありません。
QTでこれを行う簡単な方法はありますか?またはより複雑なもの?
ありがとうございました。
解決
他のヒント
この効果を達成するにはいくつかの方法がありますが、概念的には、わずかなオフセットを備えた2つのテキストレイヤーであると確認する必要があります。
QWIDGETのPaintEvent()メソッドを再実装し、テキストレイヤーを自分で描画することで、これを行ったことがあります。または、カスタムQSTYLEのdrawitemtext()メソッドを再実装することもできます。しかし、基本的にそれはそれがどのように行われるかです。
QT5のすべてのボタンでテキストシャドウをした方法は次のとおりです。これがQT4で可能かどうかはわかりません。
class MyProxyStyle : public QProxyStyle
{
public:
void drawItemText(QPainter *painter, const QRect &rect, int flags, const QPalette &pal, bool enabled, const QString &text, QPalette::ColorRole textRole /* = QPalette::NoRole */) const
{
if (textRole == QPalette::ButtonText && dynamic_cast<QAbstractButton*>(painter->device()))
{
QPalette palShadow(pal);
palShadow.setColor(QPalette::ButtonText, QColor(0, 0, 0, 100));
QProxyStyle::drawItemText(painter, rect.adjusted(1, 1, 1, 1), flags, palShadow, enabled, text, textRole);
}
QProxyStyle::drawItemText(painter, rect, flags, pal, enabled, text, textRole);
}
};
... main()のどこか
QApplication a;
a.setStyle(new MyProxyStyle);
QabstractButton dynamic_castを削除すると、メニューのタイトルも隠れていますが、これは必ずしも望ましいとは限りません。
所属していません StackOverflow