2

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

在此处输入图像描述

我认为最好的方法是设置附加到 QSystemTrayIcon 的 QMenu 样式:

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 是如何制作这样一个菜单的?

谢谢!

4

1 回答 1

1

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

至于方法 - 再次,没有做确切的事情,但我认为通用不QMenu适合这个,因为你对按钮的布局方式没有太多控制,而且我看不到方法要获得 Dropbox 示例中的空白空间,我认为您需要自己的小部件实现并添加其他小部件,将它们布置等。您可以子类化QMenu并尝试添加一些自定义小部件,如按钮等,看看是否可以帮助您进行更改你需要。

于 2013-09-10T13:27:28.467 回答