eventFilter函数中如何捕获鼠标移动事件

songhuirong1 2012-08-16 09:58:15
我想在eventFilter函数中捕获QLabel的鼠标移动事件,代码如下:

bool RubberBandWidget::eventFilter(QObject *object, QEvent *event)
{
if(object == finishLabel)
{
if(event->type() == QEvent::MouseMove)
{
qDebug() << "Mouse moving...";

finishLabel->setPixmap(QPixmap(":/sunsong/images/shotscreen_finish_gray.png"));

return true;
}
}
}

我在RubberBandWidget构造函数中加了setMouseTracking(true);
当我把鼠标移动到finishLabel上时,并没有实现我想要的结果,当我按住鼠标进行拖动的时候,我要的效果实现了。但是我要的效果是当鼠标移动到finishLabel上,就改变finishLabel的图片。请问我的代码错在哪里?望指教!谢谢!
...全文
696 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jdwx 2012-08-18
  • 打赏
  • 举报
回复
接上条,
主要看用鼠标缩放窗口的部分。
代码不多。
jdwx 2012-08-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

引用 7 楼 的回复:
我以前发现setMouseTracking(true)有时候会莫名其妙的不好用,用其他的办法能达到目的就行了。

我再请教你一个问题,当鼠标移动时,如何判断当前鼠标正处在QLabel的边缘呢?我想当鼠标停留在QLabel的边缘时,改变鼠标形状,然后进行鼠标拖拽来调整QLabel的大小。这个怎么实现呢?望指教!谢谢!
[/Quote]
关于这个问题,Qt有一个例子,网上有,关于自绘标题栏的
http://www.devbean.info/2011/10/custom-qt-titlebar/
还有原版的,和这个基本一样。
songhuirong1 2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
我以前发现setMouseTracking(true)有时候会莫名其妙的不好用,用其他的办法能达到目的就行了。
[/Quote]
我再请教你一个问题,当鼠标移动时,如何判断当前鼠标正处在QLabel的边缘呢?我想当鼠标停留在QLabel的边缘时,改变鼠标形状,然后进行鼠标拖拽来调整QLabel的大小。这个怎么实现呢?望指教!谢谢!
jdwx 2012-08-16
  • 打赏
  • 举报
回复

bool RubberBandWidget::eventFilter(QObject *object, QEvent *event)
{
if(object == finishLabel)
{
if(event->type() == QEvent::Enter)//Enter鼠标进入,Leave鼠标离开
{
qDebug() << "Mouse moving...";

finishLabel->setPixmap(QPixmap(":/sunsong/images/shotscreen_finish_gray.png"));

return true;
}
}
return QWidget::eventFilter(object,event)//调用基类函数,把事件传递下去。
}

删除 setMouseTracking(true);
再看效果如何。
songhuirong1 2012-08-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
在构造函数里面加上这句 setMouseTracking(true);默认是要按住鼠标键才能捕获到移动事件的。
[/Quote]
我不是说我已经在构造函数中加了这条代码吗?仔细看看我发的帖子。
xiebin133 2012-08-16
  • 打赏
  • 举报
回复
在构造函数里面加上这句 setMouseTracking(true);默认是要按住鼠标键才能捕获到移动事件的。
jdwx 2012-08-16
  • 打赏
  • 举报
回复
我以前发现setMouseTracking(true)有时候会莫名其妙的不好用,用其他的办法能达到目的就行了。
songhuirong1 2012-08-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
引用 3 楼 的回复:
C/C++ code


bool RubberBandWidget::eventFilter(QObject *object, QEvent *event)
{
if(object == finishLabel)
{
if(event->type() == QEvent::Enter)//Enter鼠标进入,Leave鼠标离开
{
qDe……

恩……
[/Quote]
恩。这样是可以了。我请教一下,为什么QEvent::MouseMove不行呢?
songhuirong1 2012-08-16
  • 打赏
  • 举报
回复
恩。这样是可以了。我请教一下,为什么QEvent::MouseMove不行呢?
songhuirong1 2012-08-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
C/C++ code


bool RubberBandWidget::eventFilter(QObject *object, QEvent *event)
{
if(object == finishLabel)
{
if(event->type() == QEvent::Enter)//Enter鼠标进入,Leave鼠标离开
{
qDe……
[/Quote]
恩。谢谢!我刚才查看了帮助文档,然后用了这种方法,果然成功了。请问一下为什么QEvent::MouseMOve不行呢?

16,815

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧