Как найти номер строки моей кнопки в QTableview в Qt

У меня есть функция, которая добавляет QStyleOptionButton к определенному столбцу в QTableview,
Я хочу иметь возможность получить номер строки каждой кнопки при нажатии и сохранить значение в переменной.

Это мой код Delegate.cpp

MyDelegate::MyDelegate(QObject *parent)
: QItemDelegate(parent)
{

}void MyDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
QStyleOptionButton button;
QRect r = option.rect;//getting the rect of the cell
int x,y,w,h;
x = r.left() + r.width() - 30;//the X coordinate
y = r.top();//the Y coordinate
w = 30;//button width
h = 30;//button height
button.rect = QRect(x,y,w,h);
button.text = "View log";
button.state = QStyle::State_Enabled;

QApplication::style()->drawControl( QStyle::CE_PushButton, &button, painter);
}

bool MyDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)
{
if( event->type() == QEvent::MouseButtonRelease )
{
QMouseEvent * e = (QMouseEvent *)event;
int clickX = e->x();
int clickY = e->y();

QRect r = option.rect;//getting the rect of the cell
int x,y,w,h;
x = r.left() + r.width() - 30;//the X coordinate
y = r.top();//the Y coordinate
w = 30;//button width
h = 30;//button height

if( clickX > x && clickX < x + w )
if( clickY > y && clickY < y + h )
{
// int row=tableview->rowAt(pos.y());
// int column=tableview->columnAt(pos.x());

QDialog * d = new QDialog();
d->setGeometry(0,0,100,100);
// QTextBrowser *txt = new QTextBrowser(row, column);
d->show();
}
}

return true;
}

0

Решение

Вы должны использовать QModelIndex:

bool MyDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)
{
Q_UNUSED(model)
if( event->type() == QEvent::MouseButtonRelease )
{
QMouseEvent * e = (QMouseEvent *)event;
QPoint p = e->pos();

QRect r = option.rect;//getting the rect of the cell
QRect re(r.topRight() - QPoint(30, 0), QSize(30, 30));

if(re.contains(p)){
int row = index.row(); // <---- row
int column = index.column(); // <---- column

QDialog * d = new QDialog();
d->setGeometry(0,0,100,100);
d->show();
}
}
return true;
}
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]