首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QQuickWidget与C++相互作用

QQuickWidget与C++相互作用
EN

Stack Overflow用户
提问于 2014-05-28 13:13:26
回答 1查看 6K关注 0票数 7

我正在体验新的QQuickWidget。如何在QQuickWidget和C++之间进行交互?

C++

代码语言:javascript
复制
QQuickWidget *view = new QQuickWidget();
view->setSource(QUrl::fromLocalFile("myqml.qml"));
view->setProperty("test", 0);

myLayout->addWidget(view);

QML

代码语言:javascript
复制
import QtQuick 2.1

Rectangle {
    id: mainWindow
    width: parent.width
    height: parent.height

    Text {
        id: text
        width: mainWindow.width
        font.pixelSize: 20
        horizontalAlignment: Text.AlignHCenter
        verticalAlignment: Text.AlignVCenter
        text: test
    }
}

text: test不工作:ReferenceError: test is not defined

如何通过C++为我的QML文件提供一些属性?

是否也可以在C++中获取文本对象并更新其文本?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-28 13:43:51

试试看:

代码语言:javascript
复制
view->rootContext()->setContextProperty("test", "some random text");

而不是

代码语言:javascript
复制
view->setProperty("test", 0);

如果对象具有定义为setProperty(name, val)的属性name,则可以使用Q_PROPERTY

可以将QObject-derived对象作为view的上下文属性传递:

代码语言:javascript
复制
class Controller : public QObject
{
    Q_OBJECT
    QString m_test;

public:
    explicit Controller(QObject *parent = 0);

    Q_PROPERTY(QString test READ test WRITE setTest NOTIFY testChanged)

    QDate test() const
    {
        return m_test;
    }

signals:

    void testChanged(QString arg);

public slots:

    void setTest(QDate arg)
    {
        if (m_test != arg) {
            m_test = arg;
            emit testChanged(arg);
        }
    }
};
代码语言:javascript
复制
Controller c;
view->rootContext()->setContextProperty("controller", &c);
代码语言:javascript
复制
Text {
        id: text
        width: mainWindow.width
        font.pixelSize: 20
        horizontalAlignment: Text.AlignHCenter
        verticalAlignment: Text.AlignVCenter
        text: controller.test
    }

是否也可以在C++中获取文本对象并更新其文本?

一般来说,它似乎不是最佳方法 --如果c++代码遵循模型视图模式,就不应该知道它的表示方式。

然而,正如描述的这里那样,这是可能的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23912633

复制
相关文章

相似问题

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