My QML ListView
は、マウスで摂動するまでデータを表示しません(例:)。この後、ビューはモデルが空でなくなるまで問題なく表示されます。それから私はもう一度それを働かせるためにそれを混乱させる必要がある。このListView
を動作させる方法はありますか?ListViewが最初にデータを表示していません
私はLinux 14.04でQt 5.8を使用しています。私のモデルはQAbstractListModel
のサブクラスです。私はAbstractItemModel Exampleに従ってそれを構築します。主な違いは、リストモデルがsetContextProperty
のmain.cpp
に設定されているのではなく、エンティティのプロパティであることです。
ListView
についてはまだ更新されていませんが、最初は問題がないようです。それらのほとんどはdataChanged
代わりに手動のbeforeInsertRows()
& endInsertRows()
を呼び出すOPに関連する - 私は呼んでいる両方の方法は、(下記参照。)
マイListView
がSceneLoader
を搭載した項目です。
I posted all the relevant code here、私は私が私のListView
上のレイアウトを使用する方法の少し疑わしいだから(多分それはそれを引き起こしている?たぶん私の階層が壊れている?私はかかわらを証明することができていない。)
、
リストビュー:
ListView {
anchors.fill: parent
model: sceneGraph.blobs
delegate: delegate
}
BlobModel.cpp:
auto BlobModel::addBlob(const BlobPointDataPtr& data) -> void
{
// ...
// Each blob has a uuid
const auto idx = Contains(uuid);
if (-1 != idx)
{
blobs_[idx]->Update(data);
Q_EMIT dataChanged(createIndex(idx, 0), createIndex(idx, 0));
}
else
{
beginInsertRows(QModelIndex(), rowCount(), rowCount());
blobs_ << new Blob{data, id_count_}; id_count_++;
endInsertRows(); // responsible for the QQmlChangeSet
Q_EMIT dataChanged(createIndex(rowCount(), 0), createIndex(rowCount(), 0));
}
}
また、私の端末上で、私はメッセージが表示されます。
QObject::connect: Cannot queue arguments of type 'QQmlChangeSet'
(Make sure 'QQmlChangeSet' is registered using qRegisterMetaType().)
をこれがendInsertRows()
によって放出されるようだが、私はなぜわかりません。過去には、欠けているタイプ、例えばを登録することが解決策でした。qRegisterMetaType<QQmlChangeSet*>("QQmlChangeSet");
これはQtのパブリックタイプではないようですが、ほとんどすべてがそれなしで動作するので、私はそれが正確な問題であることを忘れています。
あなたの提供したコードでできる限りコードをテストしました。簡単にするために、BlobオブジェクトをQStringsに置き換えました。私はaddBlob()をAbstractItemModelの例とまったく同じようにしました。それは私のためにうまくいった。 [コードはこちら](https://gist.github.com/anonymous/1a41d90c212c73086fe81c41374b9661) –
モデルをどのように埋め込みましたか?最初のデータがモデルに存在していればうまくいきましたが、問題は実際にモデルが空だったとき(スタートアップ時またはモデルが空になったとき)でした。それを見てくれてありがとう、実際に作成しようとします完全な最小限の例を示します。次に、あなたの例のように文字列で試してみましょう。 – Matt
ええと、私は[最小限のコンパイル可能な例(https://github.com/kheaactua/listview_issue/tree/master/listview_issue)を設定しました。午前中は、元のコードに近づけて問題の開始位置を確認してから、このコメントを削除します。 – Matt