2013-05-06 55 views
2

我正在用自定義窗口外殼編寫應用程序。外殼有圓角和透明度。下面是我如何做這個示例代碼:Qt FramelessWindowHint和WA_TranslucentBackground字體呈現

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

問題是,每當我使用WA_TranslucentBackground與FramelessWindowHint,字體渲染變得可怕,見下圖。我有一個通過全局CSS設置的自定義應用程序樣式。我嘗試使用其他字體,例如Segoe UI,但是該字體也會發生變化。

enter image description here

上爲什麼會發生什麼,我能做些什麼來解決這個問題的任何想法。我正在使用C++與Qt 5.0.2

回答

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); 

不完美,但它解決了我遇到的問題。