2

QTableView でカスタム コントロールを描画する必要があります。このコントロールは、FileChooser のように見える必要があります。

FileChooser http://www.vision.ee.ethz.ch/computing/sepp-irix/qt-3.0-mo/filechooser.png

QStyleOptionButton button_option;
button_option.state |= QStyle::State_Enabled | QStyle::State_Off;
button_option.rect = PushButtonRect(option); //calculate button rect
button_option.text = "...";
QApplication::style()->drawControl(
    QStyle::CE_PushButton,
    &button_option,
    painter);

上記のコードは QStyle::CE_PushButton を描画します - QButton のように見えますが、Qt ライブラリには QStyle::CE_LineEdit がありません。QLineEdit を描画するにはどうすればよいですか?

4

3 に答える 3

1

テーブル ビューでカスタム ウィジェットを描画するには、カスタムQItemDelegateサブクラスを作成し、少なくともcreateEditorメソッドをオーバーライドする必要があります。このメソッドでは、テーブル セルをダブルクリックしたときに表示される任意の種類のウィジェットを作成できます。このアイテム デリゲートは、テーブル ビューのそれぞれの列に割り当てることができます。

次に、QWidget から継承し、Line Edit と Button で構成される CustomFileChooser などの別のクラスを作成する必要があります。

createEditor メソッドはそのようなオブジェクトを返します。

また、setEditorData (作成されたエディター ウィジェットに現在のモデル値を割り当てる) と setModelData (変更がコミットされたときに呼び出される) をオーバーライドする必要がある場合もあります。

このように、行の編集とボタンは、テーブル セルをダブルクリックした後にのみ表示されます。常に表示したい場合は、 drawDisplay() もオーバーライドする必要があります。

于 2012-10-09T11:21:01.197 に答える
1

私は自分で答えを見つけました。以下を使用して、カスタム エディター (通常のウィジェット) を永続的に表示できます。

void QAbstractItemView::openPersistentEditor ( const QModelIndex & index )
于 2012-10-11T12:11:43.310 に答える