Окно иконки в Qt-трее - PullRequest
       0

Окно иконки в Qt-трее

3 голосов
/ 01 сентября 2010

Я использую QT.QSystemTrayIcon для создания иконки в трее.

При нажатии на иконку в трее мне нужно окно, которое открывается прямо над иконкой (в правом нижнем углу).Как я могу это сделать?

Ответы [ 4 ]

2 голосов
/ 05 апреля 2014

Если вы хотите открыть окно, выровненное по значку (как это делает встроенный регулятор громкости), взгляните на руководство для этого:

QRect QSystemTrayIcon::geometry()

Хорошо, я отвечаю 4 года спустя, потому что я нашел этот вопрос сегодня, пытаясь решить ту же проблему.

Примечание. Это хорошо работает на Win, протестировано на XP, 7 и 8, но, как указывает @MichaelScheper, на Mint / GNOME это не работает. Обратная связь на других платформах приветствуется.

2 голосов
/ 01 сентября 2010
 void main_window::create_tray_icon()
 {
    m_tray_icon = new QSystemTrayIcon(QIcon(":/icon.png"), this);

    QAction *quit_action = new QAction( "Exit", m_tray_icon );
    connect( quit_action, SIGNAL(triggered()), this, SLOT(on_exit()) );

    QAction *another_action = new QAction( "Do something", m_tray_icon );
    connect( another_action, SIGNAL(triggered()), this, SLOT(on_do_something()) );

    QMenu *tray_icon_menu = new QMenu;
    tray_icon_menu->addAction( another_action );
    tray_icon_menu->addAction( quit_action );

    m_tray_icon->setContextMenu( tray_icon_menu );

    m_tray_icon->show();
  }
0 голосов
/ 01 сентября 2010

Я не уверен, что именно вы подразумеваете под окном.Мой первый ответ относится к контекстному меню, в котором вы можете добавить несколько действий.

Если вы хотите иметь небольшое информационное окно с сообщением в нем, как в Windows, вы должны использовать QSystemTrayIcon ::ShowMessage .Там вы можете всплыть сообщение, установить продолжительность этого сообщения и установить значок для него.

0 голосов
/ 01 сентября 2010

Вы имеете в виду открыть окно, такое как QMainWindow или QWidget, над значком в трее?

Вам нужно получить QDesktopWidget, используя QApplication::desktop(), затем запросить функцию screenGeometry() в QDesktopWidget, чтобы определить размер экрана, затем создать окно и расположить его соответствующим образом в правом нижнем углу на основе координат, полученных из screenGeometry().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...