Стилизация QMenu QSystemTrayIcon

Я пытаюсь закодировать контекстное меню, подобное тому, которое имеет 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 и остается прежним.

У меня есть пара вопросов:

  1. Что я делаю не так в этой ситуации (почему цвет фона не установлен на зеленый).
  2. Является ли QMenu правильным инструментом для создания подобных выпадающих меню (возможно, мне следует использовать какой-нибудь другой виджет). Как Dropbox сделал такое меню?

Спасибо!

2

Решение

Что касается таблицы стилей — так как я делал только ненастроенные меню в трее с QT, мне трудно сказать, что не так с данным примером, я думаю, что вам также нужно переопределить элементы в строке меню, так как это установил бы только фон для меню, и, поскольку элемент занимает всю ширину, я думаю, что вы просто не можете видеть фон. Попробуйте установить стили для QMenu::item а также QMenu::item:selected чтобы увидеть, поможет ли это.

Что касается подхода — опять же, не сделали точную вещь, но я не думаю, что общий QMenu подойдет, так как у вас нет большого контроля над тем, как расположены кнопки, и я не вижу способа получить пустое пространство, как в примере с Dropbox, я думаю, что вам нужна ваша собственная реализация виджетов и добавить другие виджеты, Lay их и т. д. Вы можете подкласс QMenu и попробуйте добавить несколько пользовательских виджетов, таких как кнопки и т. д., чтобы убедиться, что это поможет вам внести необходимые изменения.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]