2013-09-10 4 views
2

Я пытаюсь кода контекстного меню аналогично одной Dropbox имеет:вводя в моду QSystemTrayIcon в QMenu

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 сделал такое меню?

Спасибо!

ответ

1

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

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

+0

Да ... Похоже, расширение QMenu - правильное направление для перехода. Здесь [1] у кого-то есть аналогичная проблема. Теперь вопрос: как выровнять QMenu .. -_- [1] http://stackoverflow.com/questions/8704668/how-to-put-pushbutton-inside-the-qmenu-or-qaction- control –

+1

Ну, по крайней мере, глядя на предоставленную ссылку, кажется, что в этом сценарии человек по-прежнему не хотел настраивать макет и тип элементов меню, просто содержимое, которое, я думаю, выполнимо именно так. Пример Dropbox меняет все, даже внешнюю форму окна, поэтому вам нужно будет управлять на более высоком уровне, я думаю. Так вы можете принять мой ответ? –

+0

Я действительно пытался заставить его работать, но в итоге сдался. Я переключился на Objective C для кода интерфейса. Я хотел реализовать это в Qt и вставить здесь, чтобы другие могли его увидеть. Принимая ваш ответ. –