void CBtn_Delegate::paint( QPainter * painter, const QStyleOptionViewItem &option, const QModelIndex &index ) const{ QWidget * w = dynamic_cast<QWidget *>( painter->device() ); if ( w ) { QStylePainter p( w ); QStyleOptionButton opt; opt.icon = QIcon( m_sIconPath ); opt.iconSize = QSize( 24, 24 ); opt.initFrom( w ); opt.rect = option.rect; if ( index.data().toInt() > 0 ) opt.state |= QStyle::State_On; p.drawControl( QStyle::CE_PushButton, opt ); } drawFocus( painter, option, option.rect );}
m_enabledEditTriggers = QAbstractItemView::DoubleClicked | QAbstractItemView::EditKeyPressed | QAbstractItemView::AnyKeyPressed | QAbstractItemView::SelectedClicked;
class QPushButtonDelegate : public QItemDelegate
QWidget *QPushButtonDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &/* option */, const QModelIndex &/* index */) const{ QPushButton *button = new QPushButton("X", parent); connect(button, SIGNAL(clicked( )), m_mainwidget, SLOT(itemAdmitsTableRowDelete())); return button;}
C++ (Qt)this->tableview->setIndexWidget(model->index(1, 1), new QPushButton("ok", this->tableview)); /*работает, кнопка в нужной ячейке*/ this->tableview->setIndexWidget(this->tableview->indexAt(QPoint(1, 1)), new QPushButton("ok", this->tableview)); /*не работает, кнопка всегда в позиции 0:0, независимо от координат заданных в QPoint */