Qt, QML, C++ QList von Strukturen als benutzerdefinierte ListView-Modell
Was ich in meinem Projekt ist die binäre Datei, die enthält eine Liste von Strukturelementen:
typedef struct {
unsigned int id;
char name[SIZE];
} Entry;
Nach dem Lesen der Daten aus der Datei in die ich alle gelesen Werte gespeichert, die in das folgende Feld meiner Klasse:
QVector<Entry> entires;
Ich tun, setzen Sie diese Liste, um QML mit der folgenden Erklärung:
Q_PROPERTY(QVector<Entry> FileContents READ getEntries NOTIFY TmpFileUpdated)
gefolgt von getter-und setter-Methoden.
inline QVector<Entry> getEntries ()
{
return this->entires;
}
inline void setEntries(QVector<entires> entries)
{
this->entires= entries;
emit TmpFileUpdated();
}
Jedes mal die Datei gelesen "setEntries" Methode wird verwendet, um die Vektor-und um ein signal auszusenden.
Listview in QML hat die Q_PROPERTY FileContents angebracht, um das Modell:
ListView {
id: myListView
width: 200
height: 400
model: myInjectedObject.FileContents
delegate: Row {
spacing: 10
Text {
text: model.entry_type //(1)
font.pixelSize: 12
horizontalAlignment: "AlignHCenter"
verticalAlignment: "AlignVCenter"
height: 20
}
}
}
Wie der Zugriff auf die Daten gehalten, auf die Liste der Strukturen und zeigen Sie es in QML?
UPDATE:
Nachdem Ihre Vorschläge, die ich änderte den code leicht und es kompiliert jetzt gut. Die folgende Klasse erstellt wurde:
class EntryClass: QObject
{
Q_OBJECT
Q_PROPERTY(QString entry_name READ getEntryName)
public:
inline EntryClass(Entry entrystruct)
{
this->entry = entrystruct;
}
private:
Entry entry;
inline QString getEntryName() const
{
return this->entry->entry_name;
}
};
ListView {
id: myListView
width: 200
height: 400
model: myInjectedObject.FileContents
delegate: Row {
spacing: 10
Text {
text: modelData.entry_name //(1)
font.pixelSize: 12
horizontalAlignment: "AlignHCenter"
verticalAlignment: "AlignVCenter"
height: 20
}
}
}
UPDATE 2
OK, nach einigen weiteren Analyse habe ich es geschafft, die Lösung finden, die funktioniert. Bezüglich der ListView Erklärung oben wurde aktualisiert, um den aktuellen Stand (struct übergeben durch Referenz hat nicht funktioniert, musste ich mit copy-by-value).
Beide Antworten waren hilfreich, in gewisser Weise, aber da nur einer kann angenommen werden, werde ich annehmen, der erste, geschrieben von Radon.
Danke Euch beiden für die Anleitung!
Du musst angemeldet sein, um einen Kommentar abzugeben.
QML kein Zugriff auf "low-level" -
struct
Arten.Aber Sie können erstellen Sie eine Klasse
EntryClass
erbtQObject
und fügen Sieid
undname
als Qt Eigenschaften (internEntryClass
können die Daten der entsprechendenEntry
struct-Instanzen, z.B. durch einen Zeiger darauf). Dann sollten Sie in der Lage sein, um Zugriff auf diese properties in QML.(Habe ich aber nicht testen)
Radon ist ein Recht, Ihre Objekte exportiert QML müssen Eigenschaften (oder Q_INVOKABLE Funktionen).
Zusätzlich, QVector wird nicht funktionieren. Sie benötigen QDeclarativeListProperty oder QVariantList als Typ der Eigenschaft.