我正在尝试编写类似于Dropbox的上下文菜单:
我认为最好的方法是将QMenu附加到QSystemTrayIcon:
class canvas : public QMenu
{
Q_OBJECT
public:
canvas(QObject* parent = 0);
};
canvas::canvas(QObject* parent) : QMenu()
{
setStyleSheet("QMenu{background-color:#00ff00;}");
}
class tray_icon : public QSystemTrayIcon
{
Q_OBJECT
public:
tray_icon(canvas* a_canvas, QObject* parent = 0);
};
tray_icon::tray_icon(canvas* a_canvas, QObject* parent) : QSystemTrayIcon(parent)
{
setContextMenu(a_canvas);
}
但由于某种原因,QMenu对setStyleSheet调用没有反应,它保持不变。
我有几个问题:
谢谢!
答案 0 :(得分:1)
至于样式表 - 由于我只使用QT进行了非自定义托盘菜单,因此我很难说出给定示例的错误,我认为您还需要覆盖菜单栏中的项目,因为这只会设置菜单的背景,并且因为项目占据整个宽度,我认为你只是看不到背景。尝试为QMenu::item
和QMenu::item:selected
设置样式,看看是否有帮助。
至于方法 - 再次,没有完成确切的事情,但我认为通用的QMenu
不适合这个,因为你无法控制按钮的布局方式我没有看到像Dropbox示例中那样获取空白的方法,我认为您需要自己的小部件实现并添加其他小部件,将它们放置等等。您可以继承QMenu
并尝试添加一些自定义小部件像按钮等,看看它是否可以帮助您提供所需的更改。