2009-06-17 8 views
2

QStandardItemModelに手動で実装された「すべて選択」機能があります。これにより、すべてのアイテム(または特定のアイテム(フィルタが関係しているアイテム))のデータがループして更新されます。問題は、モデルのdataChangedシグナルにいくつかのスロットが接続されていることです。ユーザーが「すべてを選択」して、モデルに何千ものエントリが含まれている場合、それらをすべてのステップで呼びたくはありません。Qtデータモデルを「バルクロード」して、過剰な信号呼び出しを避ける方法はありますか?

モデル内で複数のアイテムを一度に設定する方法はありますか?変更全体でdataChangedを1回だけ送信する方法はありますか?

ありがとうございました!

答えて

4

信号を発信するオブジェクトに対してメソッドを使用してみてください。これにより、信号生成を抑制して後で復元することができます。このタイプの操作には非常に便利です。

+0

ありがとうございました!これが対処しない部分は、操作全体に対してdataChanged信号を1回だけ出す必要があることです。私の特別なケースでは、実際のものの上にプロキシモデルがあり、それはinvalidate()メソッドを持っていますが、私がQStandardItemModelを直接扱っていたらどうなるでしょうか? – Owen

+0

最後の変更に達したことがわかっている場合は、操作を実行する前に信号のブロックを解除して、ただ1つの信号を送信することができます。 –

+0

もちろん、そうです。そうしたやり方はまったくマニュアルのようです。この種の操作に対する同情サポートはフレームワークに組み込まれていません。私はそれが特に珍しいとは思わない。 確かに私はこの回答を受け入れることになるでしょう。なぜなら、それは間違いなく役に立ちました。私はちょうど誰かが脳波で起こった場合のために少し質問を開いたままにする気がする。 – Owen

関連する問題