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中左键和右键的区别的主要内容,如果未能解决你的问题,请参考以下文章