QPlainTextEdit双击事件
QPlainTextEdit double click event
我需要在 QDockWidget 内的 QPlainTextEdit 上捕获双击事件。
在我的实际代码中,我在 QDockWidget 中安装了一个事件过滤器,用于处理调整大小操作,在 QPlainTextEdit 中,用于处理双击事件:
// Resize eventfilter
this->installEventFilter(this);
ui->myPlainTextEdit->installEventFilter(this);
但是,尽管它适用于 QDockWidget,但我无法捕获 QPlainTextEdit 的双击事件:
bool MyDockWidget::eventFilter(QObject *obj, QEvent *event) {
if (event->type() == QEvent::Resize && obj == this) {
QResizeEvent *resizeEvent = static_cast<QResizeEvent*>(event);
qDebug("Dock Resized (New Size) - Width: %d Height: %d",
resizeEvent->size().width(),
resizeEvent->size().height());
} else if (obj == ui->myPlainTextEdit && event->type() == QMouseEvent::MouseButtonDblClick) {
qDebug() << "Double click";
}
return QWidget::eventFilter(obj, event);
}
使用此代码,消息 "Double click" 永远不会显示。知道代码有什么问题吗?
QTextEdit
继承了一个QScrollView
,当你双击QTextEdit的视口时,视口接收到双击事件。您可以通过双击文本编辑的边缘来交叉检查当前代码。它将捕获事件。
要解决此问题,除了您已安装的当前事件过滤器之外,将事件过滤器添加到视口,如下所示:
ui->myPlainTextEdit->viewport()->installEventFilter(this);
接下来,使用此 if 语句捕获事件:
if ((obj == ui->myPlainTextEdit||obj==ui->myPlainTextEdit->viewport()) &&
event->type() == QEvent::MouseButtonDblClick)
{
qDebug() << "Double click"<<obj->objectName();
}
您可以使用QMouseEvent
捕获点击位置:
QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);
qDebug()<<QString("Click location: (%1,%2)").arg(mouseEvent->x()).arg(mouseEvent->y());
我需要在 QDockWidget 内的 QPlainTextEdit 上捕获双击事件。
在我的实际代码中,我在 QDockWidget 中安装了一个事件过滤器,用于处理调整大小操作,在 QPlainTextEdit 中,用于处理双击事件:
// Resize eventfilter
this->installEventFilter(this);
ui->myPlainTextEdit->installEventFilter(this);
但是,尽管它适用于 QDockWidget,但我无法捕获 QPlainTextEdit 的双击事件:
bool MyDockWidget::eventFilter(QObject *obj, QEvent *event) {
if (event->type() == QEvent::Resize && obj == this) {
QResizeEvent *resizeEvent = static_cast<QResizeEvent*>(event);
qDebug("Dock Resized (New Size) - Width: %d Height: %d",
resizeEvent->size().width(),
resizeEvent->size().height());
} else if (obj == ui->myPlainTextEdit && event->type() == QMouseEvent::MouseButtonDblClick) {
qDebug() << "Double click";
}
return QWidget::eventFilter(obj, event);
}
使用此代码,消息 "Double click" 永远不会显示。知道代码有什么问题吗?
QTextEdit
继承了一个QScrollView
,当你双击QTextEdit的视口时,视口接收到双击事件。您可以通过双击文本编辑的边缘来交叉检查当前代码。它将捕获事件。要解决此问题,除了您已安装的当前事件过滤器之外,将事件过滤器添加到视口,如下所示:
ui->myPlainTextEdit->viewport()->installEventFilter(this);
接下来,使用此 if 语句捕获事件:
if ((obj == ui->myPlainTextEdit||obj==ui->myPlainTextEdit->viewport()) && event->type() == QEvent::MouseButtonDblClick) { qDebug() << "Double click"<<obj->objectName(); }
您可以使用
QMouseEvent
捕获点击位置:QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event); qDebug()<<QString("Click location: (%1,%2)").arg(mouseEvent->x()).arg(mouseEvent->y());