В моем проекте есть двоичный файл, который содержит список элементов структуры:
typedef struct {
unsigned int id;
char name[SIZE];
} Entry;
После чтения данных из файла все значения чтения хранятся в следующем поле моего класса:
QVector<Entry> entires;
Я открываю этот список для QML со следующим объявлением:
Q_PROPERTY(QVector<Entry> FileContents READ getEntries NOTIFY TmpFileUpdated)
, за которым следуют методы получения и установки.
inline QVector<Entry> getEntries ()
{
return this->entires;
}
inline void setEntries(QVector<entires> entries)
{
this->entires= entries;
emit TmpFileUpdated();
}
Каждый раз, когда файлЧтение Метод setEntries используется для установки вектора и для генерации сигнала.
Представление списка в QML имеет файл-содержимое Q_PROPERTY, присоединенное к модели:
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
}
}
}
Как получить доступданные, которые хранятся в списке структур и отображаются в QML?
ОБНОВЛЕНИЕ: После ваших предложений я немного изменил код, и теперь он хорошо компилируется.Был создан следующий класс:
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
}
}
}
ОБНОВЛЕНИЕ 2 ОК, после еще одного анализа мне удалось найти решение, которое работает.Что касается объявления ListView выше, оно было обновлено до текущего состояния (передача структуры по ссылке не работала, мне пришлось использовать копирование по значению).
Оба ответа были полезны в некотором роде, но, поскольку только один можетбыть принятым, я приму первый, написанный Радоном.Спасибо вам обоим за руководство!