問題タブ [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.

0 投票する
3 に答える
6465 参照

qt - Qt:数値文字列でQSortFilterProxyModelを使用し、列テキストが間違っている場合、並べ替えが間違っています

QSortFilterProxyModelプロキシを使用して列を並べ替える単純なモデルビューツリービューが
あり、各列のモデルとしてQStandardItemModelがありますが、正しく並べ替えられる文字列がありますが、数値(文字列として)を含む列には並べ替えが間違っています。
私は9,12,1を持っていると言います(私がそれらを並べ替えると、それぞれの番号は1,12,9または12,1,9になりますが、正しい順序にはなりません。1,9,12または12,9,1のようになぜですか?
また、行を列で並べ替えるときに m_model->item(iSelectedRow,0)->text();
、最初の列のテキストを取得して新しい列のテキストを取得しようとすると、新しい並べ替えられた列のテキストは取得されないことに気付きます。なぜですか?

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

qt - QTreeView & QAbstractItemModel & insertRow

QTreeView に QAbstractItemModel を実装しようとしています。行の挿入に問題があります。アプリケーションの最初に挿入すると、すべて正常に動作することに気付きました。しかし、後で行を挿入すると、他の操作 (選択など) の後、新しい項目は非表示のままになります。さらに、QTreeView はまったく機能しないようです。行の挿入について QTreeView に通知するためにいくつかの信号を送信する必要がありますか?

これは私の挿入方法です:

LayersModelItem は、子とデータを持つ QList を持つクラスです。

私のプロジェクトの完全なコード (KDE ライブラリが必要) はこちらです: https://github.com/coder89/PhotoFramesEditor/tree/v0.0.8 問題を確認するには、メイン ウィンドウの青い項目の 1 つを選択し、それを右クリックして、 「アイテムを削除」を選択します。(このメソッドは Canvas::removeItems() にあります) 完全にコメントされています - 私は絶望的で、この問題の理由を見つけようとしました... (実際には何も削除されませんでした - 新しいアイテムを追加します)。

ヘルプとアドバイスをありがとう!

0 投票する
5 に答える
13573 参照

qt - QTreeView 水平スクロールバーの問題

QTreeView の水平スクロールバーに問題があり、表示されません。水平スクロールバー ポリシーを ScrollBarAsNeeded に設定しましたが、必要に応じて表示されません。展開された信号と折りたたまれた信号をスロットに接続しようとしました:

スロットは 1 行のコードで構成されます。

これにより、スクロールバーが機能しますが、ツリービューアイテムを展開/折りたたむ場合のみです。

アプリケーションの開始から終了まで、「毎回」水平スクロールバーを機能させる必要があります。どのように組織化できますか?

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

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

qt - QTreeViewから継承してクラスを作成します

Qtを使ってプロジェクトを始めています。ビューに次のいくつかを実行させるために、2つのアプローチを試みています。この質問には、QTreeViewから継承するアプローチが含まれます。

QTreeViewの機能が気に入っています。追加機能が欲しいだけです。

まず、他のカテゴリを含むカテゴリを表示できる階層ツリービューを作成します。列が右に行くほど、最も具体的になるまで、列がより具体的になります。メトリックは、最も具体的な列を含む行に表示されます。一般化された各列を含むビュー行は太字で表示され、モデル(またはビュー?)によって計算された各メトリックの要約が含まれます。メトリックは、最も具体的な列に関して各行のモデルに含まれます。

たとえば、次のデータ(数字を含む最後の3列)を持つモデルについて考えてみます。

国|州-州|郡-教区|市-町|人口|PerCapitaIncome| WalMarts

したがって、私の見解は次のようになります。

次に、QSqlTableModelで動作するために必要です。以前にモデルが表示されているのを見たことがありますが、上記のように階層によって行を作成する方法はありません。それが私の2番目の変更になります。

3番目の理由は、太字のヘッダーは、次の方法で並べ替えをオンにしている場合のオプションにすぎないことです。

並べ替えがオンの場合、太字のヘッダーは上の行でのみ機能し、下の行ではオフになります。そのバグを修正したいと思います。

QTreeView :: drawRow仮想メソッドは、最初のチャレンジ(そしておそらく3番目)を達成するためにオーバーライドする必要があるすべてのように見えます。QSqlTableModelを扱う2番目の課題は、よくわかりません。

とにかく、QTreeViewメソッドを呼び出すだけの汎用ctorとdtorを使用して、QTreeViewから継承する単純なクラスを作成しました。しかし、drawRowに関しては、次の問題が発生しました。QTreeView::drawRow関数は次のように始まります。

この関数は、Q_D(const QTreeView)を正常に実行し、「d」を返すことに依存しています。これは、レイアウトと関数の残りの部分に関連する重要な情報を含むQTreeViewPrivateクラスのインスタンスです。CustomTreeViewクラスを継承しているため、CustomTreeView :: drawRow()でQ_D(const QTreeView)を実行する場合は、最初にCustomTreeViewPrivateを定義してインスタンス化する必要があります。

このプライベートクラスを作成することは、継承して重要な変更を加えるために本当に必要ですか?私ができるのはいくつかの機能的なプロセスだけで、QTreeView :: drawRowを呼び出して実際の描画を行う場合、ここで継承することの利点は何ですか?

描き方を変えたい。

0 投票する
3 に答える
6200 参照

c++ - QAbstractItemModel data() は決して呼び出されません

QTreeView を作成し、それにカスタム モデルを使用しようとしています。私はさまざまな場所に声明を出しましたが、決して呼び出されないqDebug()と判断しました。この問題を解決するにはどうすればよいですか?data()

モデルのコードは以下です

ビューが配置されている MainWindow のコードを以下に示します。

このモデルではヘッダーが表示されることに注意してください。しかし、アイテムを設定しても、ヘッダーを保存したウィジェットには何も表示されません。

ああ、NeuralNetworkのサブですNeuralNode

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

c++ - QTreeViewでcheckedstatusの継承を維持する

私は何か基本的なことをしようとしています:あなたはQTreeView. 1 番目の深さはフォルダーのみ、2 番目の深さはファイルのみです。各項目の横にチェックされた状態のチェックボックスが必要です。ファイルはチェックされているかチェックされていないかのいずれかであり、フォルダーはファイルに応じて部分的にチェックされることもあります。全体として、非常に自然だと思います。

私が行くべきだった方法は、 a を使用し、QStandardItemModelそれにQStandardItem:のカスタム サブクラスを設定することでしDescriptionFileItemた。多分それは悪い考えだったので、もっと簡単な方法があれば教えてください。

ファイルのシグナルが、ファイルを含むフォルダーCheckStateChangedのスロットに接続されるように、シグナルとスロットを使用してみました。UpdateCheckedStateOnChildStateChangedこれには、私DescriptionFileItemも継承する必要QObjectがありました(ところで、QStandardItem継承しなかったことに驚きましたQObject)。私は当初、これが提供された基本クラスでシームレスに機能することを望んでいましたが、そうではありませんでした:emitDataChanged()私のモデルの dataChanged() シグナルをトリガーしていないようでした...

モデルのdataChanged信号を直接使用しても機能しませんでした。呼び出しは保護されているため、サブクラス化せずに使用することはできません (誰かがそれを正しくするのを手伝ってくれない限り、それが私の次の動きだと思います)。

現時点では、シグナル -> スロット接続が機能せず、その理由がわかりません。コンパイルとリンクは問題なく動作します。コードは次のとおりです。おそらく、私の間違いを簡単に見つけることができます。以前の試行で何が間違っていたかがわかるように、コメント行をいくつか残しています。ご意見ありがとうございます。

対応する .cpp :

そして、接続/ツリーの構築:

編集:最終的な回答、stuのおかげ(下記参照)

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

c++ - QTreeViewの子は、常に最初の最上位ノードへのポインターです。

Qtで提供されているeditableTreeViewの例に従いましたが、興味深い問題が発生しています。トップレベルのアイテムは正しく追加できますが、そのうちの1つに子を与える場合は、最初のトップレベルのアイテムへのポインターです。

QAbstractItemModelの私のコードは以下のとおりです。

NeuralNodeのコード(ツリーのアイテム)を以下に示します。

これが私が気づいたことです。

  • モデルからのindex()呼び出しをトレースすると、最上位ノードの子のインデックスが返されます
  • ui-> treeView-> selectedModel()-> currentIndex()を呼び出すと、常に無効なインデックス(ルート)が返されます。同じことがui->treeView->currentIndex()にも当てはまります。

どこかのポインタに問題の匂いがしますが、見つかりません。どんな助けでも大歓迎です。

ジェック

編集:これは問題の大まかなグラフィックです

現在:

私が欲しいもの:

ここで、A、B、C、およびDは一意のNeuralNodeです。ツリーに重複があってはなりません。

再度、感謝します。

0 投票する
3 に答える
5894 参照

c++ - Qt QTreeView:既存のアイテムにのみドロップを許可する

QTreeViewから継承したカスタムモデルがあります。ドラッグアンドドロップを有効にしましたが、現在、アイテムをツリーにドロップできます。ただし、現在、既存のアイテムまたはアイテム間でドロップできます。これを制限して、既存のアイテムにのみドロップできるようにします。

DragDropOverwriteModeをtrueに設定しました(実際には、これがQTreeViewのデフォルトです)。ただし、これはアイテム間をドロップすることを妨げるものではありません。つまり、既存のアイテムにドロップすることもできるということです。

行と列が有効かどうかを確認することで、dropMimeData(再実装中)の「挿入」ドロップを無視できることを知っています(既存のアイテムへのドロップでは、行と列が-1に設定され、親が現在のアイテムに設定されています)。私はこれをやっています。しかし、私はこれらのドロップを取得したくないです。つまり。アイテムの間にではなく、常に上のアイテムまたは下のアイテムのいずれかをドロップするようにしたいと思います。

何か案は?

アドバイスをありがとう、ジャイルズ

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

python - QTreeView のハイパーリンク

QTreeView 内にクリック可能なリンクを表示しようとしています。独自の QStyledItemDelegate を作成しました。リンクのように見えるテキストを描画できますが、リンクのようにクリックできません。

私が考えている 1 つのオプションは、リンクを使用して QLabel を作成し、QTreeView セル内に QLabel を描画することです。唯一の問題は、QLabels を QTreeView に追加する方法がわからないことです。

何か案は?

0 投票する
3 に答える
2515 参照

python - QLabel を使用しない QTreeView のハイパーリンク

QTreeView でクリック可能なハイパーリンクを表示しようとしています。

この質問の推奨事項に従って、 QLabels と QTreeView.setIndexWidget を使用してこれを行うことができました。

QTreeView のハイパーリンク

残念ながら、私の QTreeView はかなり大きく (数千のアイテム)、数千の QLabels の作成は遅いです。

利点は、QTreeView でデリゲートを使用して、ハイパーリンクのようなテキストを描画できることです。これは超高速です。

今の問題は、ハイパーリンクのように応答する必要があることです (つまり、マウスオーバー ハンド カーソル、クリックへの応答など)。

QTreeView の clicked() シグナルに接続するだけで、それを偽造することができましたが、セル内のテキストだけでなく、セル全体に応答するため、まったく同じではありません。