我只需要在使用左键鼠标的doubleClick上运行插槽,而不是两者。
// this->myComponent is a QTableView
connect(this -> myComponent, SIGNAL (doubleClicked (const QModelIndex & )), this,
SLOT (performSomeAction(const QModelIndex & )));
使用此事件,在这两种情况下双击都有效,但只需单击左键即可。 我怎么能这样做?
this -> myComponent => QTableView
答案 0 :(得分:2)
我有一段时间没有做过Qt,但这应该有效。由于QTableView是一个QWidget,你还可以重新实现mouseDoubleClickEvent(QMouseEvent * e),它会告诉你使用了哪个按钮。负责调用父实现。您只想知道使用了哪个按钮,但想要使用模型回调来处理双击。
所以它看起来像:
myComponent::mouseDoubleClickEvent( QMouseEvent * e )
{
m_leftButtonUsed = false;
if ( e->button() == Qt::LeftButton )
{
m_leftButtonUsed = true;
}
// This will call doubleClicked (const QModelIndex & )
QTableView::mouseDoubleClickedEvent(e);
}
答案 1 :(得分:2)
我找到了以下解决方案:
this -> myComponent -> viewport() -> installEventFilter(this);
bool MyClass::eventFilter(QObject *obj, QEvent *event) {
this -> event = event;
return QWidget::eventFilter(obj, event);
}
...
if (this -> event -> type() == QEvent::MouseButtonDblClick) {
QMouseEvent * mouseEvent = static_cast <QMouseEvent *> (event);
if (mouseEvent -> button() == Qt::LeftButton) {
// do something....
}
}
答案 2 :(得分:0)
doubleClicked 信号从 mouseDoubleClick 插槽发出。您可以覆盖mouseDoubleClick插槽,以检查双击是否来自左侧按钮,如果保留了双击,则可以调用mouseDoubleClick父方法,然后将发出doubleClicked信号。
@pyqtSlot(QMouseEvent)
def mouseDoubleClickEvent(self, event:QMouseEvent):
if event.button() == Qt.LeftButton:
super().mouseDoubleClickEvent(event)