問題タブ [sizehint]
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.
c++ - カスタムエディターで QTableView セクションのサイズを変更する
QTableView
とから派生したモデルを持つアプリケーションがありますQAbstractItemModel
。テーブルの最初の列にはテキスト (各行のラベル) が含まれ、2 番目の列にはQComboBox
、カスタム アイテム デリゲートから作成された を使用して選択できる値が表示されます。テーブルの内容は動的に変更される場合があります (行数、言語など)。
列のサイズを変更して、2 番目の列がコンテンツに収まるようにし、最初の列が残りのスペースを占めるように拡大したいと考えています。
私の最初の試みは:
結果:
問題は、QComboBox
が選択されたときにセクションに収まらず、クリップされていることです。
幅を手動で増やすことで、この問題を解決できました。
ここでの問題は、そのような定数 (この場合は 40) を使用することで、可能なすべての値ではなく、表示される値に応じてセクションの幅が変化することです (最大値が既に表示されている場合と、最小値のみが表示されている場合)。また、その定数は、使用されるスタイルに依存します。これは、QComboBox
.
を使用してセクション幅を手動で計算することを考えましたQt::SizeHintRole
が、完全に無視されます。たとえそうであったとしてもQFontMetrics::width
、モデルにフォント情報がないため、( を使用して) テキストの実際の幅を計算することはできません。
私が試した別のアプローチはQComboBox
、QItemDelegate::createEditor
メソッドのサイズ調整ポリシーを設定することです。
しかし、コンボ ボックスは切り取られているか、短くなっています。
表示されるデータだけでなく、コンテンツの全範囲に基づいてセクション サイズを設定するにはどうすればよいですか?
これまでに見つけた最良のアプローチと、現在プロジェクトで使用しているアプローチで質問に自己回答していますが、納得していません (回答の理由を詳しく説明しています)。 「正しい方法を知りたい。ありがとう!