qml systemtrayicon 没有 qwidget/qapplication?

Posted

技术标签:

【中文标题】qml systemtrayicon 没有 qwidget/qapplication?【英文标题】:qml systemtrayicon without qwidget/qapplication? 【发布时间】:2019-09-29 05:58:53 【问题描述】:

这里的最后一篇帖子似乎暗示 systemtrayicon 不再需要 qwidget 或 qapplication...System tray icon without widgets

我已经尝试过了,但它不适合我。我猜这是一个不正确的陈述是否正确?

将示例代码放在下面并导入。

在 main.qml 中:

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

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

错误:QWidget:没有 QApplication 无法创建 QWidget

【问题讨论】:

【参考方案1】:

TL; DR; 不,你误会了。 SystemTrayIcon需要你使用QApplication


说明:

SystemTrayIcon 是一个 QSystemTrayIcon 包装器,可以在 QML 中使用,因此必须使用 QApplication,这在 the docs 中表示:

Availability

本机系统托盘图标目前在以下设备上可用 平台:

X11 的所有窗口管理器和独立托盘实现都实现了 freedesktop.org XEmbed 系统托盘规范。 实现 freedesktop.org D-Bus StatusNotifierItem 规范的所有桌面环境,包括最新版本的 KDE 和 团结。 所有支持的 macOS 版本。请注意,必须为 showMessage() 安装 Growl 通知系统才能在 OS X 上显示消息 10.8 之前(山狮)。

Qt Labs Platform 模块使用 Qt 小部件作为没有本机的平台上的后备 实现可用。 因此,使用类型的应用程序 Qt Labs Platform 模块应该链接到 QtWidgets 并使用 QApplication 而不是 QGuiApplication。

要链接到 QtWidgets 库,请将以下内容添加到您的 qmake 项目文件:

QT += widgets

在 main() 中创建 QApplication 的实例:

#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 模块中的类型不保证保持兼容 在未来的版本中。

(强调我的)

【讨论】:

以上是关于qml systemtrayicon 没有 qwidget/qapplication?的主要内容,如果未能解决你的问题,请参考以下文章

QML.jl:没有为 QML 找到适用的加载程序

有没有办法在 qml 中从网上下载图像

QML 布局没有正确的高度

QML:没有调用 Rectangle 的 MouseArea 上的 onClicked 方法

在没有 QML 的情况下部署 Qt 项目

QML:弹出 anchors.centerIn 模糊内容(没有 anchors.alignWhenCentered)