一般来说,当我重新实现 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 );
}
QMouseEvent 中的 x() 和 y() 很好。但是,它会创建一个无效索引,其中 row() 为 -1,column() 为 -1。显然,我将一个空字符串传递给 handle_right_click() 以启动菜单。该菜单不会知道是哪一列调用了它,混乱将进一步接踵而至。
我知道 clicked( const QModelIndex& ) 只会告诉我正确的索引和文本。但是,我需要区分按钮。