首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从类等离子体qml调用c++插槽

从类等离子体qml调用c++插槽
EN

Stack Overflow用户
提问于 2017-03-07 16:42:23
回答 1查看 601关注 0票数 2

给你们一个新问题。

我有一个简单的kde (kf5)质体,有一个标签和两个按钮。

我在幕后有一个C++类,目前我能够从C++发送信号到qml。

问题是:我需要从qml按钮向C++类发送信号。

通常,这可以通过使用标准的Qt/qml对象(如QQuickView等)来完成,但在我的例子中,我没有main.cpp。

这是我的C++类头。使用QTimer,我发出textChanged_sig信号,它告诉qml刷新标签的值:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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++方法,会产生同样的效果)。

有什么暗示吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-08 08:31:12

由于可以通过currentText访问plasmoid.nativeInterface属性,所以该对象几乎肯定是C++ applet类的实例,即MyPlasmoid实例。

因此,如果您的MyPlasmoid有一个插槽,它可以作为plasmoid.nativeInterface对象上的一个函数调用。

在C++中

代码语言:javascript
复制
class MyPlasmoid : public Plasma::Applet
{
    Q_OBJECT

public slots:
    void doSomething();
};

在QML

代码语言:javascript
复制
onClicked: plasmoid.nativeInterface.doSomething()
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42653665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档