QtQuick、QML和C++集成:如何使.h文件中定义的公共变量在QML文件中可见?

m3eecexj  于 2022-12-20  发布在  其他
关注(0)|答案(1)|浏览(154)

使用以下描述的方法集成C++和QML后:
QML C++ integration
我注意到只有.h方法在类外可见(从QML级别),我无法访问公共变量。经过研究,我发现:

void QQmlContext::setContextProperty(const QString &name, const QVariant &value)

这样合适吗?
如果没有,我如何从QML级别访问我的类公共变量?
假设我可以为此创建函数,但我不喜欢这种方式。它看起来像周围的方法...

bsxbgnwa

bsxbgnwa1#

在下面的示例中,我希望将来自QtGlobal的C++ qVersion()作为System.qtVersion公开到QML。

//System.h
#ifndef System_H
#define System_H
#include <QObject>
class System : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QString qtVersion READ qtVersion CONSTANT)
public:
    System(QObject* parent = nullptr);
    QString qtVersion() const;
};
#endif
//System.cpp
#include "System.h"
System::System(QObject * parent) :
    QObject(parent)
{
}
QString System::qtVersion() const
{
    return qVersion();
}
#endif

```c++
//main.cpp
    //...
    qmlRegisterSingletonType<System>("qmlonline", 1, 0, "System", [](QQmlEngine*,QJSEngine*) -> QObject* { return new System(); } );

我可以使用以下代码段在QML中访问上面的代码:

import QtQuick
import QtQuick.Controls
import qmlonline
Page {
    Text {
        text: System.qtVersion
    }
}

你可以试试QML portion online
关于C++ Package 到QML的其他例子,请查看我的GitHub项目:

相关问题