問題タブ [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 に答える
1567 参照

c++ - QTableViewQStandardItemModelユーザーエントリを元に戻すか元に戻す

QStandarItemModelによってポップアップされたQTableViewのユーザーエントリを元に戻す、または元に戻すにはどうすればよいですか?

dataChangedシグナルをハンドラーに接続してデータを検証しました...

...しかし、ユーザーエントリが間違っている場合は、ユーザーエントリをアイテムの以前の値に戻すか元に戻したいと思います。

QAbstractItemModelから継承されたrevert()メンバーについて読みましたが、正確にどのように機能するのか理解できません。ドキュメントには、「キャッシュされた情報を破棄する必要があることをモデルに通知する」と記載されています。しかし、ユーザーが入力したデータがキャッシュされているのか、すでにモデルに保存されているのかはわかりません。

とにかくやってみたら…

...間違ったユーザーエントリの後、それは機能しません。

前もって感謝します!

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

qt - 多くの親を持つ QAbstractItemModel バッチ削除

大きなツリー モデルから多くの行を削除する必要があります。
問題は、モデルに多くの親インデックスが含まれていることです。
したがって、beginRemoveRows を何度も呼び出す必要があるため、処理が非常に遅くなります。

それぞれが異なる親を持つ多くの行をバッチで削除し、削除するたびにビューが更新されるのを避けることは可能ですか?
ビュー全体をリセットするため、beginResetModel は避けたいと思います。

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

c++ - QStringListModelアイテムのカスタムデータを設定する

QStringListModelがあります

そして、QObjectから継承されたクラス

Qt :: EditRoleにデータを設定すると、すべて正常に機能しますが、Qt :: UserRoleにデータを設定しようとすると、trueが返されることはなく、データを取得すると、無効なQVariantが表示されます。

実際、アイテムに設定しようとしているデータの種類に関係なく、これも機能しません。

そして、Qt :: UserRole + 1を試しましたが、同じ結果が得られました。たぶん、モデルで使用されるItemDataRolesを何らかの方法で定義する必要がありますか?

何か案は?ありがとう。

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

qt - QAbstractTableModelデータは表示するhtmlコードを返します

data()AbstracttableModelサブクラスメソッドがhtmlを返すようにしたい。

そして、このテキストはhtmlのようにintテーブルに表示される必要があります:PreText Text PostText

これどうやってするの?

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

qt - QThread で QAbstractTableModel のデータとのやり取りを使用できますか?

GUI 以外のスレッドでは GUI インタラクションを使用できないことはわかっています ( QThread)。しかし、スレッド内でモデル ( ) と対話できるかできないかはわかりません。Trueの場合QAbstractItemModel、正しい方法でそれを行うにはどうすればよいでしょうか?

私はこれについてGoogleとSOで正直に検索しましたが、私の質問に関連する回答がないようです。

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

pyqt - QAbstractItemModel の使用方法

PyQt の QTreeView で QAbstractItemModel を使用する必要があります。

dropMimeData メソッドで、ソース行を削除したい (特定の MIME_TYPE の場合)。ソースの行と parentIndex を取得するにはどうすればよいですか? または、他の方法でそれを行う必要がありますか。

def dropMimeData(self, mimedata, action, row, column, parentIndex):

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

qt - Qtで、QModelIndexの直接の子インデックスを並べ替える方法

Qtクラスを使用して特定のデータモデルを操作するC++アプリケーションを作成しています。その目的のために私はから継承しましたQAbstractItemModel

ある時点で、アプリケーションに並べ替え/フィルターオプションが必要になったため、から継承するクラスも作成しました。QSortFilterProxyModel

並べ替えを実現するために、デフォルトのQSortFilterProxyModel::sort()メソッドを使用し(プロキシモデルクラスで再実装していません)、しばらくの間は機能しているように見えました。

しかし、ある時点で、実際のQSortFilterProxyModel::sort()メソッドはモデル全体をソートすることに気付きました。必要なのは、特定のインデックスの直接の子のみをソートすることです。

sort()クラスのメソッドを再実装しようとしましたが、しばらくすると、それがまったく参照されていないEventModelことに気付きました。QSortFilterProxyModel::sort()一方、モデルを表示するビューがクラッシュしないように、インデックスを安全な方法で再配置する方法がわかりません。

ある特定の子だけを並べ替える方法があるはずだと思いますが、QModelIndexまだ見つけていません。

私のケースの可能な解決策を示すチュートリアル/例、またはそれを行う方法に関するいくつかのガイドラインはありますか?

よろしく

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

qt - QAbstractItemModelを回避するためのQStandardItemModelのサブクラス化

ツリーのような構造のモデル/ビューを実装していて、特定のクラス(ここでは「appSpecificClass」と呼びます)をラップするQStandardItemModelを試すことにしました。

基本的に、そのクラスの一部(名前や一部のデータなど)をモデルに表示し、モデルを変更すると(編集ロール、またはドラッグアンドドロップで)、appSpecificClassに影響を与えるようにします。 (つまり、モデルに表示されている名前を変更すると、appSpecificClassのモデルのアイテムに関連付けられているオブジェクトの名前も変更されます)。

そこで、appSpecificClassへのポインターのみを持つappSpecificItemによってQStandardItemをサブクラス化することから始めました。appSpecificItemを作成すると、テキストとアイコンがappSpecificClassから呼び出され、すべてが正常に機能します。

ただし、appSpecificItemからデータを変更する場合、当然、appSpecificClassは変更されません。これまでのところ、仮想関数(またはその他)のオーバーロードを介してappSpecificItemのポインターと対話する方法が見つからなかったためです。

誰かがこれを行う方法を知っていますか/これが可能であれば?たとえば信号の場合、どうすればよいですか

が発行されたら、appSpecificItemのポインタを変更できます。

そうでない場合は、モデルを最初から実装するための優れたチュートリアルはありますか?自分で試してみましたが、簡単なことではありません。理想的には、QStandardItemModelのようなモデルが必要ですが、もう少し抽象化されています(appSpecificClassをモデルに配置できるように)。

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

multithreading - QAbstractItemModel 遅延読み込みはアプリケーションをロックします

モデルを遅延ロードできるようにするために、canFetchMore、hasChildren、および fetchMore を実装しました。これは非常にシンプルで、QT に基づいています: http://doc.qt.io/archives/qt-4.7/itemviews-simpletreemodel.html

私の問題は、私のアプリケーションでは、子の取得は非常に迅速な操作ではないことです。サーバー側で、子が実際に誰であるかを判断する間、数秒の遅延が発生します。

私はそれに対処する方法がわかりません。誰かがノードを展開するたびに、数秒間アプリケーションをロックすることはできません。バックグラウンドでこれを実現する方法がわかりません。サブプロセスまたはスレッドを作成して、子を取得し、クライアント側のデータ構造を更新する作業を実際に行う場合、これが正常に完了したこと (およびノー​​ドが最終的に展開すること) をモデルに伝えるにはどうすればよいでしょうか。 .

また、ノードが現在バックグラウンドでデータをロード中であることを示す方法はありますか?

これらがばかげた質問である場合は申し訳ありません.GUIプログラミングは私にとってまだ少し謎であり、QTを使用したことはありません.

記録として、私は Python を使用していますが、答えが C++ で与えられている場合、それらを理解できます。

ありがとう

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

qt - TableViewモデルへのポインタを操作するには?

TableView のモデルを操作する必要がある場合は、関数を使用してこのモデルを取得する必要がありますtableView->model()。しかし、これは へのポインタを返します。これは へのポインタでQAbstractItemある必要がありQAbstractModelます。

だから...以下に示すように、動的キャストを使用して変換します。

しかし、このポインターは NULL を返し、その理由がわかりません。

初期化が必要ですか?