qml systemtrayicon без qwidget / qapplication? - PullRequest
       0

qml systemtrayicon без qwidget / qapplication?

2 голосов
/ 29 сентября 2019

Последнее сообщение здесь, по-видимому, подразумевает, что systemtrayicon больше не требует qwidget или qapplication ... Иконка в системном трее без виджетов

Я попробовал, и она не работает для меня.Правильно ли я предположил, что это неверное утверждение?

Поместите приведенный ниже пример кода и импортируйте.

в main.qml:

SystemTrayIcon {
        visible: true
        //icon.source: "qrc:/images/tray-icon.png"

        onActivated: {
            window.show()
            window.raise()
            window.requestActivate()
        }
}

Ошибка: QWidget: Cannotсоздать QWidget без QApplication

1 Ответ

1 голос
/ 29 сентября 2019

TL;DR; Нет, вы неправильно поняли.SystemTrayIcon необходимо использовать QApplication.


Объяснение:

SystemTrayIcon - это оболочка QSystemTrayIcon, которую можно использовать в QML, и поэтому необходимо использовать QApplication, что указано в документах:

Доступность

Значок собственного системного трея в настоящее время доступен на следующих платформах:

  • Все оконные менеджеры и независимые реализации лотков для X11, которые реализуют спецификацию системного трея freedesktop.org XEmbed.
  • Все настольные среды, которые реализуют спецификацию freedesktop.org D-Bus StatusNotifierItem, включая последние версии KDEи Unity.
  • Все поддерживаемые версии macOS.Обратите внимание, что система уведомлений Growl должна быть установлена ​​для showMessage () для отображения сообщений в OS X до 10.8 (Mountain Lion).

Модуль платформы Qt Labs использует Qt Widgets в качестве запасного варианта на платформах, которые не имеют встроенной реализации. Следовательно, приложения, которые используют типы из модуля Qt Labs Platform, должны ссылаться на QtWidgets и использовать QApplication вместо QGuiApplication.

Чтобы связать с библиотекой QtWidgets, добавьте следующее в файл проекта qmake:

QT += widgets

Создайте экземпляр QApplication в main ():

#include <QApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[])
{
    QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    QApplication app(argc, argv);
    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    return app.exec();
}

Примечание: типы в модулях Qt.labs не гарантированно остаются совместимыми в будущих версиях.

(акцент мой)

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