Вот мои настройки:Как написать приложение для системного трея QT без класса окна и интегрировать его с другим процессом?
Фоновый процесс, который продолжает работать, и делает его работу.
Пусковая установка, которая запускает вышеупомянутый процесс и контролирует его, перезапускает его, если он разбился или погиб.
Я хотел бы добавить доступ в системном трее в процесс пусковой установки (и процесс пусковой идеале будет содержать код для отображения в системном трее) и включить основные параметры (запуск, остановку и т.д.), чтобы быть вызван из системного трея контекстное меню. В системном лотке нет Нужно окно собственного. Просто системный лоток без окон с контекстным меню, содержащим 2-3 варианта.
Поскольку весь код, написанный до сих пор, находится на C/C++, и мне нужно, чтобы он работал в Windows и Linux, QT встречается как очевидный выбор. Я обнаружил, что довольно сложно пропустить базовый дисплей лотка пусковой установки QT. Почти каждый пример, который я видел в QSystemTrayIcon
, включает в себя наследование «mainwindow».
Ниже приведен код, который я использую для создания системного трея.
#include <QtWidgets/QApplication>
#include <QtCore/QDebug>
#include <QtGui/QIcon>
#include <QtWidgets/QSystemTrayIcon>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenu>
int main(int argc, char **argv)
{
QApplication app(argc, argv);
QPixmap oPixmap(32,32);
//QMenu* menu1 = new QMenu(); // want to get a context menu from system tray
oPixmap.load ("systemTrayIcon.png");
QIcon oIcon(oPixmap);
QSystemTrayIcon *trayIcon = new QSystemTrayIcon(oIcon);
qDebug() << trayIcon->isSystemTrayAvailable();
trayIcon->setContextMenu(menu1);
trayIcon->setVisible(true);
trayIcon->showMessage("Test Message", "Text", QSystemTrayIcon::Information, 1000);
return app.exec();
}
Код отображается в системном трее в порядке, но я не смог обойти, как добавить меню к нему. Что я хочу:
1) Добавить контекстное меню в системном трее выше, без добавления какого-либо класса окна (если это не представляется возможным)
2) Соедините эти пункты контекстного меню для функций в моем существующем код
3) App.exec() представляет собой бесконечный цикл, который обрабатывает события QT. Однако, поскольку моя пусковая установка имеет собственный цикл событий, я хочу сделать так, чтобы цикл событий QT был интегрирован с моей петлей запуска. Другими словами, добавьте некоторые задачи, отличные от QT, к циклу событий.
Для пункта 3. см. [Здесь] (http://stackoverflow.com/questions/1051333/combing-an-external-event-loop-with-qts). Хотя я бы посоветовал вам создать поток для вашей собственной вещи, если ему постоянно нужно что-то обрабатывать. Кроме того, почему этот вопрос отмечен как C, так и C++? Я не вижу проблем с совместимостью языка. Пожалуйста, исправьте теги соответственно. – tambre
Спасибо за информацию. Он помечен как C и C++, так как это языки, которые я разрабатываю. В отличие от python. Вероятно, по той же причине, что связанный с вами вопрос помечен как C++? – 16tons
Ну, конечно, вы должны пометить соответствующий язык, но я не вижу здесь кода C, поэтому я считаю, что тег C не имеет значения. – tambre