我创建了一个自定义类型我的Qt 5.2 QML应用如何使用带有QML信号的自定义Qt类型?
class Setting : public QObject
{
Q_OBJECT
Q_PROPERTY(QString key READ key WRITE setKey)
Q_PROPERTY(QVariant value READ value WRITE setValue)
public:
Setting(QObject * parent = 0);
QString key() const;
void setKey(QString const & key);
QVariant value() const;
void setValue(QVariant const & value);
private:
QString m_key;
QVariant m_value;
};
内,在我的主要函数注册它:
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
qmlRegisterType<Setting>("Setting", 1,0, "Setting");
// ...
}
在我的应用我想有,有一个按钮信号与我的自定义类型作为参数:
import Setting 1.0
Button
{
signal settingChanged(string, Setting)
// ...
}
每当我按下按钮信号应该发射。
如果我尝试我的QML信号有我的C++插槽连接
QObject::connect(myButton, SIGNAL(settingChanged(QString, Setting)), this, SLOT(settingChanged(QString, Setting)));
的Qt说
QObject::connect: No such signal Button_QMLTYPE_41_QML_45::settingChanged(QString, Setting) in ...
如果我从信号定义中删除我的自定义类型
Button
{
signal settingChanged(string)
// ...
}
和修改连接呼叫
QObject::connect(myButton, SIGNAL(settingChanged(QString)), this, SLOT(settingChanged(QString)));
连接呼叫工作。
我可以使用我的自定义qml类型在我的应用程序的qml部分内设置。但我做错了,如果我想用我的信号settingChanged?
谢谢!
您是否在类声明的末尾放置了'Q_DECLARE_METATYPE(Setting)'宏? – Nejat 2014-09-04 04:01:24
@Nejat我没有定义这个宏。但是当我在我的类声明结尾处放置Q_DECLARE_METATYPE(Setting)时,结果与我的问题中所述的相同。所以,没有任何改变。 – Franz 2014-09-04 16:34:08