区分QTableView中的左键和右键单击

时间:2013-02-12 10:20:12

标签: qt mouseevent qtableview

我有一个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}}?

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();
    }
}