Я пытаюсь закодировать контекстное меню, подобное тому, которое имеет 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 и остается прежним.
У меня есть пара вопросов:
Спасибо!
Что касается таблицы стилей — так как я делал только ненастроенные меню в трее с QT, мне трудно сказать, что не так с данным примером, я думаю, что вам также нужно переопределить элементы в строке меню, так как это установил бы только фон для меню, и, поскольку элемент занимает всю ширину, я думаю, что вы просто не можете видеть фон. Попробуйте установить стили для QMenu::item
а также QMenu::item:selected
чтобы увидеть, поможет ли это.
Что касается подхода — опять же, не сделали точную вещь, но я не думаю, что общий QMenu
подойдет, так как у вас нет большого контроля над тем, как расположены кнопки, и я не вижу способа получить пустое пространство, как в примере с Dropbox, я думаю, что вам нужна ваша собственная реализация виджетов и добавить другие виджеты, Lay их и т. д. Вы можете подкласс QMenu
и попробуйте добавить несколько пользовательских виджетов, таких как кнопки и т. д., чтобы убедиться, что это поможет вам внести необходимые изменения.
Других решений пока нет …