QT-mouseMoveEvent()不响应

  迷惑了我两天,最终莫名其妙得又可以响应了。。。

  我做的是在主窗口下的QLabel的mouseMoveEvent()的响应。

   解决方案一:

    若实在响应不了,可采取在控件类中重写eventFilter(),专门去处理mouseMove事件,不去再用mouseMoveEvent。

bool QEVFPictureBox::eventFilter(QObject *o, QEvent *e)
{
	static bool i = false;
	if ((o == this) && (e->type() == QEvent::MouseMove))
	{
		if (i = !i) return true;
		QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(e);
		if (mouseEvent->buttons() == Qt::LeftButton && !m_ptMousePress.isNull())
		{
			// process    

			return true;
		}
	}
	return false;
}

解决方案二:

当你在网上查了很多方法后,莫名其妙的又可以响应了。。。骂人

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
如果在重写 `mouseMoveEvent` 函数后发现没有响应,可能是以下原因: 1. 没有启用鼠标跟踪 在默认情况下,只有当鼠标按下时,才会启用鼠标跟踪。如果想要在鼠标移动时也可以跟踪,需要调用 `setMouseTracking(true)` 函数启用鼠标跟踪。 例如: ```cpp MyWidget::MyWidget(QWidget *parent) : QWidget(parent) { setMouseTracking(true); // 启用鼠标跟踪 // 其他初始化操作 } ``` 2. 没有设置窗口的鼠标追踪属性 在某些情况下,可能需要在窗口中显示鼠标移动事件,这时需要设置窗口的鼠标追踪属性为 `Qt::MouseTracking`。 例如: ```cpp MyWidget::MyWidget(QWidget *parent) : QWidget(parent) { setMouseTracking(true); // 启用鼠标跟踪 setAttribute(Qt::WA_Hover); // 设置鼠标追踪属性 // 其他初始化操作 } ``` 3. 鼠标事件被其他控件截获 如果在窗口中有其他控件(如按钮、文本框等),可能会截获鼠标事件,导致 `mouseMoveEvent` 函数无法响应。这时需要在其他控件中重写对应的鼠标事件,或者通过设置 `eventFilter` 函数来拦截鼠标事件。 例如: ```cpp // 通过 eventFilter 拦截鼠标事件 bool MyWidget::eventFilter(QObject *watched, QEvent *event) { if (watched == ui->label && event->type() == QEvent::MouseMove) { QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event); // 处理鼠标移动事件 QPoint pos = mouseEvent->pos(); qDebug() << "Mouse move to: " << pos.x() << ", " << pos.y(); return true; } return false; } // 在构造函数中安装事件过滤器 MyWidget::MyWidget(QWidget *parent) : QWidget(parent) { ui->label->installEventFilter(this); // 安装事件过滤器,拦截鼠标事件 // 其他初始化操作 } ``` 以上是一些可能导致 `mouseMoveEvent` 函数无法响应的原因,可以结合具体情况进行调试。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值