1

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

4

1 回答 1

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();
    }
}
于 2013-02-12T10:37:36.143 回答