問題タブ [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.
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 を使用しています。
qt4 - PySide を使用した TreeView のチェックボックス フィールド
QTreeView のブール値をドロップダウンではなくチェックボックスとしてレンダリングする方法を探しています (デフォルトのようです)。私が持っている特定の制限は、QTreeView をサブクラス化したくないということです。これには、生成された .py ファイル (.ui ファイルから) のウィジェットを置き換える必要があるためです。
PySide: v1.2.1 QtCore: v4.8.5 Python: 2.7
c++ - 2 つの QStandardItemModel に同時に QStandardItem を追加する
まず、あなたの答えを前もって感謝したいと思います。1 つの QStandardItemModel に 1 つの QStandardItem を挿入し、このモデルをツリー ビュー (A) に表示します。この後、別のツリー ビュー (B) に関連付けられている新しい QStandardItemModel に同じ項目 (ポインター) を追加します。この 2 番目のケースでは、同じテキストの 1 つのアイテムではなく、1 つの空のアイテムのみが表示されます。アイテムのコピーを作成すると、期待どおりの結果が得られます。2 つの異なるモデルに同じアイテムを追加できないのはなぜですか?
この場合、modelA と modelB は同じデータを持っていますが、非常に異なる構造に従っているため、QSortFilterProxyModel を使用することは役に立ちません。
どうもありがとうございました。
これを行うことができない場合、どの解決策を提案しますか? ハッシュテーブルを使ってテーブルモデル間の対応を保っていますが、もっと簡単な解決策があると思います。
コード例を 1 つコピーします。
c++ - QStandardItemModel:アイテムのバッチを追加する効率的な方法はありますか?
のバッチをQStandardItem
モデルに追加する効率的な方法はありますか? モデルをクリアしてから、たくさんのアイテムを追加しています。QtreeWidget
これだけのaddTopLevelItems ( const QList<QTreeWidgetItem *> & items )
ために、モデル/ビューアーキテクチャでそのような追加を最適化する方法は?
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() メソッドにアクセスするようには見えず、プログラムは引き続きクラッシュします。
qt4 - QTreeViewで展開矢印が表示される列を変更する
を使用してQAbstractItemModel
データを保存し、 を使用しQTreeView
て情報を表示しています。展開矢印を最初の列ではなく 2 番目の列に移動しようとしましたが、うまくいきませんでした。QTableView
a を使用して、各列の動作を定義できるかどうかを確認しようとしましたが、成功しませんでした。何か案は?
以前は をpygtk
表示するために使用しTreeView
ていましたが、展開矢印を呼び出す列を定義する簡単な方法があります。TreeView.set_expander_arrow()