【发布时间】:2014-04-24 14:02:25
【问题描述】:
我想从 c++ 调用一个 qml 方法,将自定义类型作为参数传递。
这是我的自定义类型(*请注意,我发布的所有代码都不是我正在使用的,我已经提取了相关部分,所以如果您尝试编译,可能需要进行一些更改)
自定义.h
class Custom : public QObject
{
Q_OBJECT
Q_PROPERTY(QString ssid READ getSSID WRITE setSSID)
public:
Q_INVOKABLE const QString& getSSID() {
return m_ssid;
}
Q_INVOKABLE void setSSID(const QString& ssid) {
m_ssid = ssid;
}
}
private:
QString m_ssid;
};
Q_DECLARE_METATYPE(NetworkInfo)
自定义.cpp
Custom::Custom(): QObject() {
setSSID("ABC");
}
Custom::Custom(const Custom & other): QObject() {
setSSID(other.getSSID());
}
这是我调用qml方法的地方
void MyClass::myMethod(const Custom &custom) {
QMetaObject::invokeMethod(&m_item,
"qmlMethod", Q_ARG(QVariant, QVariant::fromValue(custom)));
}
在哪里QQuickItem& m_item
我已将 Custom 声明为 QML 和 QT 元类型
qmlRegisterType<Custom>("com.mycustom", 1, 0, "Custom");
当我尝试访问 qml 中的参数时
import com.mycustom 1.0
function(custom) {
console.log(custom.ssid)
}
我明白了
qml: undefined
如果我这样做 console.log(custom) 我会得到
qml: QVariant(Custom)
所以,我想说我的类型已正确导入到 Qt 中(我已经使用它直接在 Qml 中用
实例化它没有问题Custom {
....
}
现在,问题:)
为什么我无法访问 ssid 属性?
【问题讨论】: