Обычно я могу заставить это работать без проблем, когда я повторно реализую QTableView :: mousePressEvent (QMouseEvent *). Однако выполнение этого в QHeaderView у меня не работает. Код прост.
void my_header_t::mousePressEvent( QMouseEvent* event )
{
if ( !event ) {
return;
}
if ( event->button() == Qt::RightButton ) {
QPoint point( event->x(), event->y() );
QModelIndex index = indexAt( point );
printf( "%s data %s %d,%d %s (point: %d,%d )\n",
ts().c_str(), index.data().toString().toStdString().c_str(),
index.row(), index.column(), index.isValid() ? "True" : "False",
event->x(), event->y() );
handle_right_click( index.data().toString() );
} else {
QHeaderView::mousePressEvent( event );
}
x () и y () из QMouseEvent в порядке. Однако он создает недопустимый индекс с row () равным -1 и column () равным -1. Очевидно, я передаю в handle_right_click () пустую строку, которая запускает меню. Это меню не будет знать, в каком столбце оно было названо, и в дальнейшем начнется хаос.
Я знаю, что нажатие (const QModelIndex &) просто сообщит мне правильный индекс с текстом. Однако мне нужно различать кнопки.