Qt:具有半透明背景的QMenu

时间:2012-09-27 15:02:55

标签: qt menu popup qmenu

我使用Windows,我想将样式表设置为QMenu,使其具有半透明背景。为了使其工作,我首先设置FramelessWindowHint,然后设置WA_TranslucentBackground属性。然后我设置样式表并使用弹出方法显示菜单。它被正确绘制,但它表现得很奇怪:只要它具有FramelessWindowHint,它就始终可见(甚至在调用popup()方法之前)。单击其中一个条目后,它不再隐藏自己。

这是一个简约的例子:

#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 个答案:

答案 0 :(得分:2)

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

应该解决你的问题。现在您要清除Qt已设置的所有标志。