我有一个QTableView,其中左键和右键鼠标都会导致一些工作。
右键单击应启动上下文菜单,左侧应打开另一个进程。
我在QMainWindow中使用以下连接来实现此目的
connect(Table , SIGNAL( customContextMenuRequested( const QPoint& ) ),this, SLOT( tableContextMenu( const QPoint& ) ) );
connect(Table , SIGNAL (clicked ( const QModelIndex&)), this, SLOT(test()));
问题相当简单。由于我使用clicked()
信号来捕获左键单击,因此也会捕获右键单击。因此,如果我点击右键单击按钮,以及上下文菜单,则还会为左键单击保留操作。
我该如何避免这种情况? 好心提醒。感谢。
修改
我的代码设置如下:
Table = new QTableView(this);
TableLayout *t = new TableLayout();
Table->setModel(t);
Table->setContextMenuPolicy(Qt::CustomContextMenu);
connect(Table , SIGNAL( customContextMenuRequested( const QPoint& ) ),this, SLOT( tableContextMenu( const QPoint& ) ) );
这就是我为右键单击上下文菜单所做的操作,所有这些都在P14MainWindow
构造函数中定义,QMainWindow
构造函数是MouseReleaseEvent
的对象。
现在我应该在哪里重新实现{{1}}?
答案 0 :(得分:2)
启动上下文菜单重新实现QTableView::contextMenuEvent(QContextMenuEvent* e)
,并类似地重新实现QTableView::mouse...Event(QMouseEvent* event)
以捕获鼠标事件。
然后使用QTableView::indexAt(const QPoint& pos) const
返回点击网站上的模型索引。
以下是左键单击处理的示例:
void Table::mouseReleaseEvent(QMouseEvent* event)
{
QTableView::mouseReleaseEvent( event );
if ( event->button == Qt::LeftButton ) {
test();
}
}