私のプロジェクトにあるのは、構造要素のリストを含むバイナリファイルです。
typedef struct {
unsigned int id;
char name[SIZE];
} Entry;
ファイルからデータを読み取った後、すべての読み取り値をクラスの次のフィールドに格納します。
QVector<Entry> entires;
私はこのリストを次の宣言でQMLに公開します:
Q_PROPERTY(QVector<Entry> FileContents READ getEntries NOTIFY TmpFileUpdated)
その後にgetterメソッドとsetterメソッドが続きます。
inline QVector<Entry> getEntries ()
{
return this->entires;
}
inline void setEntries(QVector<entires> entries)
{
this->entires= entries;
emit TmpFileUpdated();
}
ファイルが読み取られるたびに、「setEntries」メソッドを使用してベクトルを設定し、信号を送信します。
QMLのリストビューには、モデルに添付されたQ_PROPERTYFileContentsがあります。
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
}
}
}
UPDATE 2 OK、もう少し分析した後、私はうまくいく解決策を見つけることができました。上記のListView宣言に関しては、現在の状態に更新されました(参照による構造体の受け渡しは機能しませんでした。値によるコピーを使用する必要がありました)。
どちらの答えも何らかの形で役に立ちましたが、受け入れることができるのは1つだけなので、ラドンが書いた最初の答えを受け入れます。指導ありがとうございました!