私は実装していますが、各行の最後の列にQAbstractTableModel
a を挿入したいと思います。QPushButton
ユーザーがこのボタンをクリックすると、この行に関する詳細情報を含む新しいウィンドウが表示されます。
ボタンを挿入する方法を知っていますか?システムの委任については知っていますが、すべての例は「コンボボックスで色を編集する方法」についてのみです...
私は実装していますが、各行の最後の列にQAbstractTableModel
a を挿入したいと思います。QPushButton
ユーザーがこのボタンをクリックすると、この行に関する詳細情報を含む新しいウィンドウが表示されます。
ボタンを挿入する方法を知っていますか?システムの委任については知っていますが、すべての例は「コンボボックスで色を編集する方法」についてのみです...
モデル ビュー アーキテクチャは、ウィジェットを別のセルに挿入するようには作成されていませんが、セル内にプッシュ ボタンを描画できます。
違いは次のとおりです。
つまり、これを行う方法は次のとおりです。
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 */);
}
}
デリゲートはモデル ビュー領域内にユーザーを保持するため、選択と編集に関するビュー シグナルを使用して、情報ウィンドウをポップアップ表示します。
setCellWidget(row,column,QWidget*)
特定のセルにウィジェットを設定するために使用できます。