在QTableView中区分左键和右键单击
我有一个QTableView,在这个视图中,鼠标左键和右键都会产生一些效果 右键单击将启动一个上下文菜单,左键单击将打开另一个进程 为此,我在qMain窗口中使用以下连接在QTableView中区分左键和右键单击,qt,mouseevent,qtableview,Qt,Mouseevent,Qtableview,我有一个QTableView,在这个视图中,鼠标左键和右键都会产生一些效果 右键单击将启动一个上下文菜单,左键单击将打开另一个进程 为此,我在qMain窗口中使用以下连接 connect(Table , SIGNAL( customContextMenuRequested( const QPoint& ) ),this, SLOT( tableContextMenu( const QPoint& ) ) ); connect(Table , SIGNAL (clicked (
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
?以启动上下文菜单重新实现QTableView::contextMenuEvent(QContextMenuEvent*e)
,并类似地重新实现QTableView::mouse…Event(QMouseEvent*Event)
以捕获鼠标事件
然后使用QTableView::indexAt(constqpoint&pos)const
在单击站点返回模型索引
以下是左键单击处理的示例:
void Table::mouseReleaseEvent(QMouseEvent* event)
{
QTableView::mouseReleaseEvent( event );
if ( event->button == Qt::LeftButton ) {
test();
}
}
我试过了。我把
connect(表,信号(mousePressEvent(QMouseEvent*)),这个,插槽(test(QMouseEvent*))在测试(QMouseEvent*)
中,我检查单击了哪个按钮,以此类推。但我总是在调试窗口中得到这样一条消息:Object::connect:没有这样的信号QTableView::mousePressEvent(QMouseEvent*)Err。。。它们不是插槽。它们是通过对象的事件调度器从事件队列接收事件的方法。阅读文档:啊……上下文菜单没问题。嗯..你知道我如何只用clicked()
信号就能做到这一点吗?因此,它进入了test()
槽,我可以确定单击了哪个按钮,避免右键单击,如果左键单击,则继续操作?这将使事情比重新实现简单得多。单击视图时,视图的mousePressEvent(…)
接收到一个鼠标事件,它运行单击行为的逻辑,然后发出clicked(…)
信号。哪一个鼠标按钮触发了该信号不会被保存,并且不能保证用户仍然按住该按钮,因此直接查询鼠标按钮不会有帮助。实现这一点的方法是通过事件系统,因为这就是它的用途。我将更新我的帖子以包含一个示例实现。感谢您的帮助。但我有点困惑,到底在哪里实现这个,以及是否需要任何连接。我对Qt有点陌生。你能检查一下问题的编辑部分吗?谢谢