我有一个QTableView中,其中两个左和右击鼠标导致一些工作,在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
?
我试过了。我把'连接(表,SIGNAL(mousePressEvent(QMouseEvent *)),这一点,SLOT(测试(QMouseEvent *)));'和'测试(QMouseEvent *)',我检查哪个按钮被点击等等。但是,我总是在调试窗口的消息**对象::连接:没有这样的信号QTableView中:: mousePressEvent(QMouseEvent *)** – user1173240 2013-02-12 10:49:07
犯错......他们不是插槽。它们是通过对象的事件分派器从事件队列中接收事件的方法。阅读文档:http://qt-project.org/doc/qt-4.8/eventsandfilters.html – cmannett85 2013-02-12 10:52:45
Ah..context菜单不是问题。那么,我知道我怎么才能用'clicked()'信号来做到这一点。所以它进入'test()'插槽,我可以确定哪个按钮被点击过,避免右键点击,只要点击鼠标左键就可以继续。这会让事情变得更简单,而不是重新实现。 – user1173240 2013-02-12 11:15:11