Архитектура вида модели не предназначена для вставки виджетов в разные ячейки, но вы можете нарисовать кнопку внутри ячейки.
Различия:
- Это будет только рисунок кнопки
- Без дополнительной работы (возможно, немного дополнительной работы) кнопка не будет выделена при наведении мыши
- Вследствие # 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 */);
}
}
Поскольку делегат удерживает вас в области представления модели, используйте сигналы представлений о выборе и изменениях, чтобы открыть ваше информационное окно.