Как подключить сигнал в c++ в qml в плазмоиде?

Мне нужно подключить сигнал из c++ в qml. Я делаю это так:

Connections{
    target: Plasmoid.nativeInterface
    onStateChanged: {
        serverState.text = Plasmoid.nativeInterface.state
    }
    onPlayersChanged: {
        players.text = Plasmoid.nativeInterface.players
    }
}

но надпись не меняется. Как правильно подключить сигнал?

main.qml:

/*
    SPDX-FileCopyrightText: 2021 Dmitry Safronov <[email protected]>
    SPDX-License-Identifier: LGPL-2.1-or-later
*/

import QtQuick 2.1
import QtQuick.Layouts 1.1
import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.plasmoid 2.0
import org.kde.plasma.components 2.0 as PlasmaComponents

Item {
    width: 250
    height: 200
    Connections{
        target: Plasmoid.nativeInterface
        onStateChanged: {
            serverState.text = Plasmoid.nativeInterface.state
        }
        onPlayersChanged: {
            players.text = Plasmoid.nativeInterface.players
        }
    }
    PlasmaComponents.Label{
        id: serverStateLbl
        text: "Состояние сервера:"
        x: 10
        y: 10
        width: 130
        height: 20
    }
    PlasmaComponents.Label{
        id: serverState
        text: Plasmoid.nativeInterface.state
        color: "red"
        onTextChanged: {
            if(serverState.text === "Выключен") serverState.color = "red"
            else if(serverState.text === "Включается" | serverState.text === "Выключается") serverState.color = "yellow"
            else if(serverState.text === "Включен") serverState.color = "green"
        }
        x: 140
        y: 10
        width: 60
        height: 20
    }
    PlasmaComponents.Label{
        id: playersLbl
        text: "Игроки:"
        x: 10
        y: 40
        width: 100
        height: 20
    }
    PlasmaComponents.Label{
        id: players
        text: Plasmoid.nativeInterface.players
        x: 110
        y: 40
        width: 60
        height: 20
    }
}

serverwidget.h:

/*
    SPDX-FileCopyrightText: 2021 Dmitry Safronov <[email protected]>

    SPDX-License-Identifier: LGPL-2.1-or-later
*/

#ifndef SERVERWIDGET_H
#define SERVERWIDGET_H

#include <Plasma/Applet>
#include <QTcpServer>
#include <QTcpSocket>

class serverWidget : public Plasma::Applet{
    Q_OBJECT
    Q_PROPERTY(QString     players     READ getPlayers     NOTIFY playersChanged)
    Q_PROPERTY(QString     state      READ getState      NOTIFY stateChanged)

public:
    serverWidget(QObject *parent, const QVariantList &args);
    ~serverWidget();
    QString getPlayers();
    QString getState();
public slots:
    void incommingConnection();
    void read();
signals:
    void playersChanged();
    void stateChanged();
private:
    QString players;
    QString state;
    void setPlayers(QString players);
    void setState(QString state);
    QTcpServer *server;
    QTcpSocket *plugin;
};

#endif

serverwidget.cpp:

/*
    SPDX-FileCopyrightText: 2021 Dmitry Safronov <[email protected]>
    SPDX-License-Identifier: LGPL-2.1-or-later
*/

#include "serverwidget.h"

serverWidget::serverWidget(QObject *parent, const QVariantList &args)
    : Plasma::Applet(parent, args)
{
    server = new QTcpServer();
    server->listen(QHostAddress::Any, 30779);
    connect(server, SIGNAL(newConnection()), this, SLOT(incommingConnection()));
    state = "Выключен";
}

serverWidget::~serverWidget(){
    delete server;
    delete plugin;
}


void serverWidget::incommingConnection(){
    plugin = server->nextPendingConnection();
    connect(plugin, SIGNAL(readyRead()), this, SLOT(read()));
}
void serverWidget::read(){
    QByteArray data = plugin->readAll();
    QString answerWithVar = QString::fromUtf8(data);
    QString var;
    foreach(QChar c, answerWithVar){
        if(c != ":") var.append(c);
        else break;
    }
    QString answer = answerWithVar.replace(var + ":", "");
    qInfo() << var + ": " + answer;
    if(var.contains("players")) setPlayers(answer);
    else if(var.contains("state")) setState(answer);
}

void serverWidget::setPlayers(QString players){
    this->players = players;
    emit playersChanged();
}
void serverWidget::setState(QString state){
    this->state = state;
    emit stateChanged();
}

QString serverWidget::getPlayers(){ return players; }
QString serverWidget::getState(){ return state; }

K_EXPORT_PLASMA_APPLET_WITH_JSON(serverwidget, serverWidget, "metadata.json")

#include "serverwidget.moc"

Изпользую Qt 5.15.2


Ответы (0 шт):