[英]Qt double click check left button mouse
我只需要用鼠标左键在 doubleClick 上运行插槽,而不是同时运行。
// this->myComponent is a QTableView
connect(this -> myComponent, SIGNAL (doubleClicked (const QModelIndex & )), this,
SLOT (performSomeAction(const QModelIndex & )));
对于此事件,双击在两种情况下都有效,但仅需要单击左键。 我该怎么做?
this -> myComponent => QTableView
我找到了以下解决方案:
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....
}
}
我有一段时间没有做 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);
}
doubleClicked信号从mouseDoubleClick插槽发出。 您可以覆盖 mouseDoubleClick 插槽检查是否双击来自左按钮,如果双击是左键,则您可以调用 mouseDoubleClick 父方法,然后将发出 doubleClicked 信号。
@pyqtSlot(QMouseEvent)
def mouseDoubleClickEvent(self, event:QMouseEvent):
if event.button() == Qt.LeftButton:
super().mouseDoubleClickEvent(event)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.