Я создал пользовательский тип в моем Qt 5.2 QML приложенияКак использовать настраиваемый тип Qt с сигналом QML?
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
@Nejat У меня нет этого макроса. Но когда я положил Q_DECLARE_METATYPE (Setting) в конце объявления класса, результат будет таким же, как описано в моем вопросе. Итак, ничего не изменилось. – Franz