問題タブ [qabstractitemmodel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
13588 参照

qt - QAbstractListModel から行を削除する

QML に公開されている QAbstractListModel から派生したカスタム モデルがあります。新しいアイテムを追加したり、既存のアイテムを削除したりする操作をサポートする必要があります。挿入操作は問題なく動作しますが、削除操作では endRemoveRows() 関数の呼び出し中にアプリケーションがクラッシュします。

クラス GPage は QObject から派生します。endRemoveRows() を呼び出そうとしているときにアプリがクラッシュする原因を突き止めようとして、私は感銘を受けました。endRemoveRows() が呼び出されると、「ASSERT failure in QList::at: "index out of range"」というメッセージが表示されます。QAbstracListModel から行を削除するにはどうすればよいですか? 他に方法はありますか?

Windows 7 64 ビット マシンで Qt 5.1.0 を使用しています。

0 投票する
0 に答える
204 参照

qt4 - PySide を使用した TreeView のチェックボックス フィールド

QTreeView のブール値をドロップダウンではなくチェックボックスとしてレンダリングする方法を探しています (デフォルトのようです)。私が持っている特定の制限は、QTreeView をサブクラス化したくないということです。これには、生成された .py ファイル (.ui ファイルから) のウィジェットを置き換える必要があるためです。

PySide: v1.2.1 QtCore: v4.8.5 Python: 2.7

0 投票する
0 に答える
916 参照

c++ - 2 つの QStandardItemModel に同時に QStandardItem を追加する

まず、あなたの答えを前もって感謝したいと思います。1 つの QStandardItemModel に 1 つの QStandardItem を挿入し、このモデルをツリー ビュー (A) に表示します。この後、別のツリー ビュー (B) に関連付けられている新しい QStandardItemModel に同じ項目 (ポインター) を追加します。この 2 番目のケースでは、同じテキストの 1 つのアイテムではなく、1 つの空のアイテムのみが表示されます。アイテムのコピーを作成すると、期待どおりの結果が得られます。2 つの異なるモデルに同じアイテムを追加できないのはなぜですか?

この場合、modelA と modelB は同じデータを持っていますが、非常に異なる構造に従っているため、QSortFilterProxyModel を使用することは役に立ちません。

どうもありがとうございました。

これを行うことができない場合、どの解決策を提案しますか? ハッシュテーブルを使ってテーブルモデル間の対応を保っていますが、もっと簡単な解決策があると思います。

コード例を 1 つコピーします。

0 投票する
0 に答える
371 参照

c++ - QStandardItemModel:アイテムのバッチを追加する効率的な方法はありますか?

のバッチをQStandardItemモデルに追加する効率的な方法はありますか? モデルをクリアしてから、たくさんのアイテムを追加しています。QtreeWidgetこれだけのaddTopLevelItems ( const QList<QTreeWidgetItem *> & items )ために、モデル/ビューアーキテクチャでそのような追加を最適化する方法は?

0 投票する
2 に答える
4299 参照

c++ - QAbstractListModel から項目を削除した後に QML がクラッシュする

OS-X 10.8.5 を搭載した Mac で Qt 5.1.1 と QtCreator 2.8.1 を実行しています。ImageData オブジェクトを管理する QAbstractListModel があります。main.cpp に ImageProvider を登録した後、GridView を使用して QML で画像を読み込んで問題なく表示できます。

次に、ビュー内の個々の画像を選択します。たとえば、選択した複数の画像がオレンジ色の境界線で下に表示されます。

ここに画像の説明を入力

次に、C++ モデル関数 deleteSelected() は、期待される結果を生成します。

ここに画像の説明を入力

ただし、ウィンドウのサイズを変更しようとすると、コーナーの 1 つをつかむなどしてクラッシュします。スタック トレースには次のように表示されます: Exception Type: EXC_CRASH (SIGABRT) で、Qt エラーが発生します:

おそらく、モデル アイテムを不適切に削除したか、モデルに変更を通知できなかったのでしょう。間違いなく、これについて他に何かが欠けています。

サイズ変更後にアプリケーションがクラッシュするのを防ぐために、ResetModel の begin と end も呼び出しましたが、その場合、モデルに関連付けられた他のビューはすべて元のアイテムの表示に戻ります。

私はこれに対する解決策を探し、多くのコード実験を試み、ここ、ここ、ここ、および他のいくつかの場所に投稿されたコード研究まし

これを適切に機能させることができないようです。何か提案はありますか? ありがとう!

以下は関連するコードです。


main.cpp:

DataModelController.h:

DataModelController.cpp

ImageData.h:

main.qml:

イメージデータ.cpp:


編集: 範囲チェックに関する以下の userr1728854 のコメントの後、DataModelController::data() の最初の部分を編集して、これが問題であるかどうかを確認しました。

私のコードは次のようになりました(元のコードを変更するよりも以下を参照する方が簡単です。また、投稿した内容を変更して質問のコンテキストを変更したくありませんでした):

したがって、これが範囲チェックを data() メソッドに追加する最も確実な方法ではない場合でも、次の行:

cout << "model index = " << index.row() << endl;

ウィンドウのサイズを変更すると、少なくとも「index.row()」を出力する必要がありますが、そうではありません。そのため、ウィンドウのサイズを変更しても data() メソッドにアクセスするようには見えず、プログラムは引き続きクラッシュします。

0 投票する
2 に答える
1681 参照

qt4 - QTreeViewで展開矢印が表示される列を変更する

を使用してQAbstractItemModelデータを保存し、 を使用しQTreeViewて情報を表示しています。展開矢印を最初の列ではなく 2 番目の列に移動しようとしましたが、うまくいきませんでした。QTableViewa を使用して、各列の動作を定義できるかどうかを確認しようとしましたが、成功しませんでした。何か案は?

以前は をpygtk表示するために使用しTreeViewていましたが、展開矢印を呼び出す列を定義する簡単な方法があります。TreeView.set_expander_arrow()