造型QSystemTrayIcon的QMenu

时间:2013-09-10 13:04:10

标签: c++ css qt5 qmenu

我正在尝试编写类似于Dropbox的上下文菜单:

enter image description here

我认为最好的方法是将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调用没有反应,它保持不变。

我有几个问题:

  1. 在这种情况下我做错了什么(为什么背景颜色没有设置为绿色)。
  2. QMenu是构建类似下拉菜单的正确工具(也许我应该使用其他一些小部件)。 Dropbox如何制作这样的菜单?
  3. 谢谢!

1 个答案:

答案 0 :(得分:1)

至于样式表 - 由于我只使用QT进行了非自定义托盘菜单,因此我很难说出给定示例的错误,我认为您还需要覆盖菜单栏中的项目,因为这只会设置菜单的背景,并且因为项目占据整个宽度,我认为你只是看不到背景。尝试为QMenu::itemQMenu::item:selected设置样式,看看是否有帮助。

至于方法 - 再次,没有完成确切的事情,但我认为通用的QMenu不适合这个,因为你无法控制按钮的布局方式我没有看到像Dropbox示例中那样获取空白的方法,我认为您需要自己的小部件实现并添加其他小部件,将它们放置等等。您可以继承QMenu并尝试添加一些自定义小部件像按钮等,看看它是否可以帮助您提供所需的更改。