4

入力時に結果をフィルタリングするために、上部にQTableView埋め込まれたサブクラスを作成しようとしています。QLineEdit通常の と同じ API を持つテーブルが必要なので、サブクラス化してandを追加するのQTableViewではなく、サブクラス化したいと考えています。QWidgetQLineEditQTableView

を再実装し、を少し低く開始するようpaintEvent(QPaintEvent*)に変更し( aQPaintEventの高さ、その下に描画される)、それを に渡すことができると考えましたが、引数は、再描画する必要がある領域を指定するだけであり、再描画する必要はありません。ウィジェットがペイントされる領域。rect()QLineEditQTableView::paintEvent()QPaintEvent

4

3 に答える 3

7

この点で行うことはすべてハッキーになり、すべてのシグナルとスロットを子ウィジェットに手動でマッピングするのと同じくらい多くの作業(おそらくより多くの作業)が発生します。ペイントイベントを変更するだけでなく、すべてのマウスイベントを調整したり、更新長方形を調整したりする必要があります。

または、QtソースからQTableViewクラスを取得して直接変更することもできます(ただし、商用ライセンスがない場合は、おそらくLGPLが破損し、ソースを公開する必要があります)。 QTableViewを子としてコンテナウィジェットを実装している。

于 2009-06-13T21:33:57.667 に答える
1

ダニエルに同意する必要があります。これは正しいアプローチではないと思います。フィルタリングを実行するための行編集を含むカスタム ウィジェットを作成することをお勧めします。そうしないと、Qt ハッキングの挑戦的な世界に足を踏み入れることになります。

本当に QTableView インターフェイスへのアクセスを提供する必要がある場合は、テーブルへの参照を返す public get メソッドを追加するだけです。

これは、Qt が QWidget を継承するが内部で使用するプライベート QTabBar を持つ QTabWidget クラスを提供する方法と多少似ています。大きな違いの 1 つは、public アクセサーではなく、保護されたtabBar() アクセサーを提供することです。

于 2009-06-17T16:40:18.230 に答える