Новый вопрос для вас, ребята.
У меня есть простой плазмоид kde (kf5) с меткой и двумя кнопками.
У меня есть закулисный класс C ++, и в настоящее время я могу отправлять сигналы из C ++ в qml.
Проблема: мне нужно отправить сигналы от кнопок qml в класс C ++.
Обычно это можно сделать с помощью стандартных объектов Qt / qml, таких как QQuickView и так далее, но в моем случае у меня нет main.cpp.
Это мой заголовок класса C ++. Используя QTimer, Я излучаю textChanged_sig сигнал, который указывает qml обновить значение метки:
class MyPlasmoid : public Plasma::Applet
{
Q_OBJECT
Q_PROPERTY(QString currentText READ currentText NOTIFY textChanged_sig)
public:
MyPlasmoid( QObject *parent, const QVariantList &args );
~MyPlasmoid();
QString currentText() const;
signals:
void textChanged_sig();
private:
QString m_currentText;
}
Это плазмоид main.qml:
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 {
Plasmoid.fullRepresentation: ColumnLayout {
anchors.fill: parent
PlasmaComponents.Label {
text: plasmoid.nativeInterface.currentText
}
PlasmaComponents.Button {
iconSource: Qt.resolvedUrl("../images/start")
onClicked: {
console.log("start!") *** HERE
}
}
}
}
PlasmaComponents.Label Элемент содержит правильное значение поля c ++ m_currentText.
*** ЗДЕСЬ мне нужно испустить некоторый сигнал (или вызвать метод c ++, будет иметь тот же эффект).
Любой намек?
Так как вы можете получить доступ к currentText
собственность через plasmoid.nativeInterface
этот объект почти наверняка является экземпляром класса вашего апплета C ++, т.е. MyPlasmoid
пример.
Так что если ваш MyPlasmoid
имеет слот, он может быть вызван как функция на plasmoid.nativeInterface
объект
в C ++
class MyPlasmoid : public Plasma::Applet
{
Q_OBJECT
public slots:
void doSomething();
};
в QML
onClicked: plasmoid.nativeInterface.doSomething()
Других решений пока нет …