問題タブ [qtreeview]
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 - QTreeView での Qt コンテキスト メニューの分割選択
次のようにコンテキストメニューがインストールされたQTreeView
クラスがあります。
ただし、コンテキスト メニューが表示されている場合、 はQTreeView
マウス クリックに応答しなくなります。コンテキスト メニューが表示されているときに項目をクリックするとQTreeView
、コンテキスト メニューが削除されますが、クリックした項目は選択されません。
これは、コンテキスト メニューが新しいアイテムの上にポップアップ表示されるため、新しいアイテムを右クリックすると特に混乱しますが、アイテムが選択されていないため、コンテキスト メニューの内容は以前に選択されたアイテムを参照しています。
qt - QTreeViewにデータを入力するためのコードにバグはありますか?
私はPyQt4.4を使用しています。
いくつかの写真を使用して表示するのが最適です。すべてのノードには0から99までのリーフが必要です。これらはとを使用して増分的にロードされcanFetchMore()
ますfetchMore()
。しかし、何らかの理由で私にはわかりませんが、これはルートノードに対してのみ機能します。(写真1)
ノードを折りたたんで展開すると、さらに10個の値が読み込まれます。(写真2&3)
また、コードがへの呼び出しごとに5つしかロードしないため、10個の値がロードされることも奇妙です。つまりfetchMore()
、コードがさらにデータのロードを停止する前に、これが2回呼び出されます。
問題を示すために小さな例を作成しました。を使用して実行してpython test.py
ください。
http://snipt.org/lLh
誰かがこのエラーの原因を知っていますか?
qt - オブジェクトが外部で変更されたときに QListView を更新する
モデル オブジェクトが外部で変更されたときのQTreeView (または QAbstractItemView のサブクラス)の更新に関する簡単な質問があります。リストにQAbstractItemModelのサブクラスが表示されていて、そのモデルの項目がリスト ウィンドウの外で変更され、その変更でリストを更新したいとします。このようなことを達成するための通常の戦略は何ですか? QAbstractItemModelの Qt ドキュメントを見てきましたが、モデルからのデータが変更されたときに発行される (または発行されるべき) ' dataChanged 'という名前の信号があります。しかし、このシグナルは (すべての QAbstractItemModel 関数/シグナル/スロットと同様に) QModelIndexで動作するため、ドキュメントが明確に述べているように永続的ではありません。データのQPersistentModelIndex(es)へのマッピングを何らかの方法で保存することになっているので、データが変更されたときに、対応するQPersistenModelIndexを見つけて、それをさまざまな引数として使用できますQAbstractItemModel関数? それはQPersistentModelIndex (es) が使用されるものですか? または、何か不足していますか?
ありがとうございました。
ps: QTreeViewをリロードするだけでよいと思いますが、どの項目が展開されたか、またはどの項目が選択されたかはわかりません。この問題を克服し、リストをリロードするだけの戦略はありますか?
c++ - QTreeViewの特定のインデックスのカスタムテキストの色
カスタムカラー(各行に関連するデータに応じて)を使用して、QTreeViewウィジェットの列の1つにテキストを描画したいと思います。drawRow()で保護されたメソッドをオーバーロードし、次のようにスタイルオプションパラメーターを変更しようとしました(簡略化された例)。
しかし、これはうまくいかないように見えるので、明らかに私は何かが欠けています(私はQPalette::WindowText
色の役割も変更しようとしました)。
c++ - QTreeViewでQModelIndexの(視覚的な)位置を見つける簡単な方法
のノードの物理的な位置を計算することに興味があり、QTreeView
これを行う方法を見つけることができません(自分で計算する以外は、の堅牢性を考えると面倒でエラーが発生しやすくなりますQTreeView
)。
に関連付けられたデータの描画位置を見つける標準的な方法はありますか(位置をにマップするQModelIndex
方法に似ています)?indexAt()
QModelIndex
qt4 - ディレクトリのようなツリー構造を格納および編集 (GUI) するための最もエレガントで安全で簡単なソリューションは?
少し難しい問題があります。これを想像してください:
私のアプリケーションの 1 つはスクリプトを多用する必要があるため、ユーザーがスクリプト スニペットを記述し、それらをディレクトリのようなツリー構造に編成する方法を提供することを考えました。これは、サブディレクトリとソース ファイルを含むソース コード ディレクトリによく似ています。
データクラス/保存
最初に遭遇する問題は、ツリー構造全体を (ディスク上および実行時にアプリケーション内に) 格納するための適切な方法を見つける必要があるということです。このために、私はこれらのアイデアを持っていました:
- QObject の親子機能を使用してツリーを表すことができる QObject 派生クラスを使用します。このようにして、親が削除された場合にそれらのオブジェクトを削除することを心配する必要はありません。
- 子の QList (ポインターなし) と、各グループ/スクリプトのプロパティを格納するいくつかのプロパティを含む単純なクラスを使用します。
- アプローチ#2を使用しますが、静的オブジェクトの代わりにポインターを使用します-これにより、グループまたはツリーの一部を関数などに渡す必要がある場合に無駄なコピーを回避できます.
- SQLite (または同様の) データベースへのライブ バックエンドを使用し、実行時にクエリを実行します。これにより、ツリー全体を一度にロードして RAM に保持することを回避できます。
- ファイル システムでフラットなファイルとディレクトリ構造を使用します。ただし、オブジェクトに関するメタ情報を保存する方法がないため、必要以上に問題が発生すると思います。
編集者
次に遭遇する問題は、ユーザーがおそらくツリー構造全体を編集したいという事実です。彼は、グループまたはスクリプトをクリックして、スクリプト コードを編集し、場合によってはディレクトリとスクリプトをツリー内でドラッグ アンド ドロップしたいと考えています。したがって、途中でツリー全体の構造を変更します。
これにより、次の問題が発生します。
- ユーザーがエディターを閉じた場合は、「変更を保存しますか?」という質問をユーザーに提供することをお勧めします。ダイアログ。誤って既存のドキュメントに何かを入力したテキスト エディターによく似ていますが、変更を保存せずに終了します。- これには、ツリー全体のコピーを編集し、必要に応じてアプリケーション内の既存のツリーを上書きする必要があります。
- ドラッグ&ドロップを許可すると問題が発生する可能性があります...
- ...保存方法 #1 : 現在、QObjects の子の順序を変更する良い方法はありません。また、プログラムの他の部分がオブジェクトにアクセスする可能性があるときに、実行時にオブジェクトを移動することはお勧めできません。
- ...これは、アプローチ #2 を格納する方が簡単です。ツリー全体が単一の値のように処理され、移動して再親化する必要がある子がないためです。ツリーの一部をコピーすると、すべての子などが自動的にコピーされます。残念ながら、これは多くのオーバーヘッドと柔軟性の損失を意味します (何が正確に変更されたかわからないため、ツリー全体をディスクに再度書き込む必要があります)。
もっと多くのことが頭に浮かんだら、おそらくこの質問を少し更新しますが、他の人がこの問題をどのように解決するのか本当に興味があります. 任意の提案やアイデアをいただければ幸いです。:)
qt - Qtでアイテムビューにリッチ(html)テキストをレンダリングさせる方法
モデルにQt::DisplayRoleの次の文字列を持つアイテムがあるとします。
QTreeView(実際には任意のアイテムビュー)でリッチテキストのようにレンダリングしたいと思います。代わりに、アイテムビューは、デフォルトで純粋なテキストのようにレンダリングします。目的のレンダリングを実現するにはどうすればよいですか?
実際、これは検索結果モデルです。ユーザーがテキストを入力すると、そのテキストに対して一部のドキュメントが検索され、ユーザーに検索結果が表示されます。検索対象の単語は、周囲のテキストよりも太字にする必要があります。
qt - QTreeView に垂直ヘッダーを追加する
素敵な水平ヘッダーを持つサブクラス (およびサブクラス) がありますQTreeView
。QAbstractItemModel
一致する垂直ヘッダー (左側に下に行く) を追加したいと思います。ただし、垂直ヘッダー ( ) と水平ヘッダー ( )がQTableView
別々になっているのとは異なり、単一のヘッダー ( ) しか使用できません。setVerticalHeader()
setHorizontalHeader()
QTreeView
setHeader()
左端の列がヘッダーであるふりをして、別の背景色でレンダリングできることはわかっています (行のサイズを変更したり再配置したりする必要はないため、これらの特別な動作を実装する必要はありません)。 )。しかし、それはローカル スタイルを考慮していません。たとえば、私のシステムでは、ヘッダーにわずかなグラデーションがあり、ほぼ 3D の外観になっています。
したがって、適切な垂直ヘッダーを追加する方法を探しています (のサブクラスになると思いますQHeaderView
) か、ヘッダーを左端の列にレンダリングしますが、正しい方法でレンダリングします。
c++ - QTreeViewを使用して選択したアイテムの詳細を取得するにはどうすればよいですか?
私は次のようにQDirModelでQTreeViewを使用しています:
これは正常に機能しますが、選択したファイルの詳細を取得する方法がわかりません。私はこれまでにこれを持っています:
しかし、今何をすべきかわからないので、各ファイルの名前とフルパスを取得したいと思います。例は本当に素晴らしいでしょう。ありがとうございました。
c++ - QTreeViewのQAbstractItemModelで人工ノードを作成する方法
私の質問はQtとそのQAbstractItemModelについてです。
std::map<stringclass, double>
Qtウィジェットに表示したい文字列とdouble()のマップがあります。そのためにQTableViewを使用することもできますが、マップのキーが「 」で始まる複数の文字列、さらにabc.def.ghi
は「」で始まる複数の文字列が存在する可能性があるという事実を利用したいと思います。abc.def
abc
そこで、 QTreeViewでアイテムを表示するようにツリーデータモデルを設定したいと思います。
私の鍵はstd::map
ツリーの葉です。他のすべてのノードは、ユーザーの便宜のために折り畳みをサポートするための一時的で補助的な構造になります。
残念ながら、メソッド、、、rowCount
およびにはconst-modifiersがあるため、QAbstractItemModel派生内のヘッダーの補助データ構造を単純に設定して、そのデータ構造を変更することはできません。index
columnCount
data
そのためのベストプラクティスは何でしょうか?自分std::map
とQAbstractItemModelの間に別のクラスレイヤーを設定する必要がありますか、それともこれを行うためのよりスマートな方法がありますか?
編集1:QTreeViewが表示および使用されているstd::map
間に変更される可能性があるため、補助ノードが破棄されて再構築される可能性があります。私の仮定は、これを処理する最良の方法はQAbstractItemModelを再構築することです-または、単にそのモデルを破棄して、新しく構築されたモデルをQTreeViewに割り当てる必要がありますか?その場合、メソッドの定数に煩わされることなく、コンストラクター内のすべてのノードをセットアップできたと思います。