我創建了一個自定義類型我的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