QTableView中左键和右键的区别

Posted

技术标签:

【中文标题】QTableView中左键和右键的区别【英文标题】:Differentiating between Left and right clicks in QTableView 【发布时间】:2013-02-12 10:20:11 【问题描述】:

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

要启动上下文菜单,重新实现 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();
    

【讨论】:

我试过了。我输入了connect(Table , SIGNAL (mousePressEvent ( QMouseEvent *)), this, SLOT(test(QMouseEvent *)));test(QMouseEvent *),我检查点击了哪个按钮等等。但我总是在调试窗口中收到消息 Object::connect: No such signal QTableView::mousePressEvent (QMouseEvent *) Err... 它们不是插槽。它们是通过对象的事件分派器从事件队列接收事件的方法。阅读文档:qt-project.org/doc/qt-4.8/eventsandfilters.html 啊..上下文菜单没问题。嗯..知道如何仅使用clicked() 信号来做到这一点吗?所以它进入test() 插槽,我可以识别单击了哪个按钮,避免右键单击,如果左键单击则继续?这将使事情变得更简单,而不是重新实现。 当视图被点击时,视图的mousePressEvent(..) 接收到一个鼠标事件,它运行它的点击行为逻辑,然后它发出clicked(..) 信号。未保存哪个鼠标按钮触发了信号,并且不能保证用户仍然按住按钮,因此直接查询鼠标按钮将无济于事。做到这一点的方法是通过事件系统,因为这就是它的用途。我将更新我的帖子以包含示例实现。 感谢您的帮助。但是我对在哪里实现这一点以及是否需要任何连接有点困惑。我对 Qt 有点陌生。请检查问题的编辑部分好吗?谢谢。

以上是关于QTableView中左键和右键的区别的主要内容,如果未能解决你的问题,请参考以下文章

在.NET中交换鼠标左键和右键

在PyCharm上,我的左键和右键都没有反应。

主键、外键和索引的区别?

主键和唯一键的区别

主键、唯一键和候选键的区别

修电脑