Betrachten Sie die leicht modifizierten birthday_party.h
example aus den unten aufgeführten Standard-QT-Beispiellisten.`Unbekannter Methodenparameter'-Fehler während der Ausführung von QML
Im folgenden Code habe ich einen Stub test()
Funktion hinzugefügt, die nur den Namen der Person mit dem übergebenen Zeiger druckt.
#ifndef BIRTHDAYPARTY_H
#define BIRTHDAYPARTY_H
#include <QObject>
#include <QQmlListProperty>
#include "person.h"
class BirthdayParty : public QObject
{
Q_OBJECT
Q_PROPERTY(Person *host READ host WRITE setHost)
Q_PROPERTY(QQmlListProperty<Person> guests READ guests)
public:
BirthdayParty(QObject *parent = 0);
Person *host() const;
void setHost(Person *);
QQmlListProperty<Person> guests();
int guestCount() const;
Person *guest(int) const;
Q_INVOKABLE Person* invite(const QString &name);
Q_INVOKABLE void test(Person* p);
private:
Person *m_host;
QList<Person *> m_guests;
};
#endif // BIRTHDAYPARTY_H
Die Definition für test()
ist
void BirthdayParty :: test(Person* p)
{
QString qname = p->name();
std::cout << qname.toUtf8().constData() << std::endl;
}
Meine QML-Datei, wo ich Test nennen, ist
import QtQuick 2.0
import People 1.0
BirthdayParty {
host: Person { name: "Bob Jones" ; shoeSize: 12 }
guests: [
Person { name: "Leo Hodges" },
Person { name: "Jack Smith" },
Person { name: "Anne Brown" },
Person { name : "Gaurish Telang"}
]
Component.onCompleted:
{
test(guests[0])
}
}
nun der obige Code kompiliert und läuft gut. Wenn ich jedoch das const
Qualifikationsmerkmal vor Person* p
in der Argumentliste von test()
hinzufüge, erhalte ich Fehler von QML zur Laufzeit! (Dh Laufzeit barfs wenn die Signatur für Test in beiden Kopf- und CPP ist void test(const Person* p)
)
Der Fehler, den ich zur Laufzeit erhalten, ist
qrc:example.qml:17: Error: Unknown method parameter type: const Person*
Es scheint, mein Fehler mit dem identisch ist, berichtet here auf dem Bug -Report-Website. Ich verwende Qt 5.10, die neueste Version von Qt.
EDIT
Die Person
und BirthdayParty
Typen wie folgt
qmlRegisterType<BirthdayParty>("People", 1,0, "BirthdayParty");
qmlRegisterType<Person>("People", 1,0, "Person");
Wie registrieren Sie Ihre Artikel? – folibis
@folibis Siehe Bearbeiten. Ich habe nicht geändert, wie ich die Typen registriert habe, während ich experimentiere mit dem Zusatz "const" oben. Macht das einen Unterschied? – smilingbuddha