2

カスタム ウィンドウ シェルを使用してアプリケーションを作成しています。シェルは角が丸く、透明感があります。これが私がこれをどのように行っているかのサンプルコードです:

MyWindow::MyWindow (void) : QMainWindow (NULL, Qt::FramelessWindowHint)
{
    setAttribute (Qt::WA_TranslucentBackground);
    setAttribute (Qt::WA_NoSystemBackground   );
}

問題は、FramelessWindowHint で WA_TranslucentBackground を使用するたびに、フォントのレンダリングがひどくなることです。下の画像を参照してください。グローバル css を介して設定されたカスタム アプリケーション スタイルがあります。Segoe UI など他のフォントを使ってみたのですが、そのフォントも変わってしまいます。

ここに画像の説明を入力

なぜこれが起こっているのか、この問題を解決するために何ができるのかについてのアイデア。Qt 5.0.2 で C++ を使用しています

4

1 に答える 1

1

どうやら解決策を見つけたようです。まず、Qt::WA_TranslucentBackground を使用したくない場合は、QWidget::setMask を使用して角を丸くすることができます。これが私が思いついたサンプルコードです:

void MyWindow::setVisible (bool visible)
{
    // Call the default event
    QMainWindow::setVisible (visible);

    // Set a rounded mask (size() needs to be correct)
    QBitmap t (size());
    t.fill (Qt::color0);

    QPainter p (&t);
    p.setBrush (Qt::color1);
    p.drawRoundedRect (rect(), 5, 5);

    setMask (t);
}

透過性のために、フォントにアンチエイリアシングを優先させる必要があります。これをアプリケーションの最初に置くことができます。

    QFont font = QApplication::font();
    font.setStyleStrategy (QFont::PreferAntialias);
    QApplication::setFont (font);

完璧ではありませんが、私が抱えていた問題を解決しました。

于 2013-05-06T18:53:30.310 に答える