4

私は実装していますが、各行の最後の列にQAbstractTableModela を挿入したいと思います。QPushButtonユーザーがこのボタンをクリックすると、この行に関する詳細情報を含む新しいウィンドウが表示されます。

ボタンを挿入する方法を知っていますか?システムの委任については知っていますが、すべての例は「コンボボックスで色を編集する方法」についてのみです...

4

3 に答える 3

3

モデル ビュー アーキテクチャは、ウィジェットを別のセルに挿入するようには作成されていませんが、セル内にプッシュ ボタンを描画できます。

違いは次のとおりです。

  1. 押しボタンの図面のみとなります
  2. 余分な作業がなければ (おそらくかなりの余分な作業)、マウスオーバー時にボタンが強調表示されません
  3. 上記の #1 の結果、シグナルとスロットは使用できません

つまり、これを行う方法は次のとおりです。

QAbstractItemDelegate (またはQStyledItemDelegate ) をサブクラス化し、メソッドを実装しpaint()ます。プッシュボタン コントロール (またはその他のコントロール) を描画するには、スタイルまたはQStylePainter::drawControl()メソッドを使用する必要があります。

class PushButtonDelegate : public QAbstractItemDelegate
{
    // TODO: handle public, private, etc.
    QAbstractItemView *view;

    public PushButtonDelegate(QAbstractItemView* view)
    {
        this->view = view;
    }

    void PushButtonDelegate::paint(
        QPainter* painter,
        const QStyleOptionViewItem & option,
        const QModelIndex & index
        ) const 
    {
        // assuming this delegate is only registered for the correct column/row
        QStylePainter stylePainter(view);
        // OR: stylePainter(painter->device)

        stylePainter->drawControl(QStyle::CE_PushButton, option);
        // OR: view->style()->drawControl(QStyle::CE_PushButton, option, painter, view);
        // OR: QApplication::style()->drawControl(/* params as above */);
    }
}

デリゲートはモデル ビュー領域内にユーザーを保持するため、選択と編集に関するビュー シグナルを使用して、情報ウィンドウをポップアップ表示します。

于 2010-05-04T16:40:48.353 に答える
0

setCellWidget(row,column,QWidget*)特定のセルにウィジェットを設定するために使用できます。

于 2011-10-20T13:55:22.857 に答える