2012-09-27 243 views
2

我使用Windows,我想將樣式表設置爲QMenu以賦予其半透明背景。爲了這個工作,我首先設置了FramelessWindowHint,然後設置了WA_TranslucentBackground屬性。然後,我設置了我的樣式表並使用彈出方法顯示菜單。它被正確繪製,但它的行爲奇怪:只要它具有FramelessWindowHint,它總是可見的(甚至在調用popup()方法之前)。它的一個條目被點擊後,它不再隱藏自己。Qt:具有半透明背景的QMenu

這裏是一個簡約的例子:

#include <QApplication> 
#include <QMenu> 
#include <QPoint> 
#include <QCursor> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    QMenu menu; 
    menu.addAction("about", &a, SLOT(aboutQt())); 
    menu.addAction("exit", &a, SLOT(quit())); 
    menu.setWindowFlags(Qt::FramelessWindowHint); 
    menu.setAttribute(Qt::WA_TranslucentBackground); 
    menu.setStyleSheet("QMenu{background:rgba(255, 0, 0, 50%);}"); 
    menu.popup(QCursor::pos()); 
    return a.exec(); 
} 

回答

1
menu.setWindowFlags(menu.windowFlags() | Qt::FramelessWindowHint); 

應該解決您的問題。現在您正在清除已由Qt設置的所有標誌。