首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QPlainTextEdit双击事件

QPlainTextEdit双击事件
EN

Stack Overflow用户
提问于 2015-07-23 08:01:54
回答 1查看 3.4K关注 0票数 3

我需要捕获位于QPlainTextEdit内部的QDockWidget上的双击事件。

在我的实际代码中,我在QDockWidget中安装了一个事件筛选器,以处理调整大小的操作,并在QPlainTextEdit中安装了一个事件过滤器,以处理双击事件:

代码语言:javascript
复制
// Resize eventfilter
this->installEventFilter(this);
ui->myPlainTextEdit->installEventFilter(this);

但是,虽然它适用于QDockWidget,但我无法捕获QPlainTextEdit的双击事件:

代码语言:javascript
复制
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);
}

使用此代码,将不会显示“双击”消息。你知道密码有什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-23 09:11:42

  1. QTextEdit继承QScrollView,当双击QTextEdit的视口时,视图端口将接收双击事件。您可以通过双击文本编辑的边缘来交叉检查当前代码。它会捕捉到这一事件。
  2. 要解决这一问题,除了安装了当前事件筛选器外,还可以将事件筛选器添加到视图端口,如下所示: ui->myPlainTextEdit->viewport()->installEventFilter(this);
  3. 接下来,使用以下if语句捕获事件: if ((obj ui->myPlainTextEdit||obj==ui->myPlainTextEdit->viewport()) && == ->type() == QEvent::MouseButtonDblClick) { qDebug() <<“双击”
  4. 您可以使用QMouseEvent捕获单击位置: QMouseEvent *mouseEvent =static_cast(事件);qDebug()<
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31581453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档