Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在QTableView中区分左键和右键单击_Qt_Mouseevent_Qtableview - Fatal编程技术网

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

在QTableView中区分左键和右键单击,qt,mouseevent,qtableview,Qt,Mouseevent,Qtableview,我有一个QTableView,在这个视图中,鼠标左键和右键都会产生一些效果 右键单击将启动一个上下文菜单,左键单击将打开另一个进程 为此,我在qMain窗口中使用以下连接 connect(Table , SIGNAL( customContextMenuRequested( const QPoint& ) ),this, SLOT( tableContextMenu( const QPoint& ) ) ); connect(Table , SIGNAL (clicked (

我有一个QTableView,在这个视图中,鼠标左键和右键都会产生一些效果

右键单击将启动一个上下文菜单,左键单击将打开另一个进程

为此,我在qMain窗口中使用以下连接

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有点陌生。你能检查一下问题的编辑部分吗?谢谢