eventFilter监控鼠标动作,请教

tt2com 2012-10-11 02:47:09

bool Vrf_home::eventFilter(QObject *obj, QEvent *ev)
{
if (obj==home_ui.monitor)
{
if (ev->type()==QEvent::MouseButtonRelease)
{
home_ui.monitor->setGeometry(QRect(55, 123, 106, 106));
home_ui.monitor->setStyleSheet(QString::fromUtf8("border-image: url(:/test_memory/Resources/monitor.png);"));
return true;
}
if (ev->type()==QEvent::MouseButtonPress)
{
home_ui.monitor->setGeometry(QRect(55-14, 123-14, 106+28, 106+28));
home_ui.monitor->setStyleSheet(QString::fromUtf8("border-image: url(:/test_memory/Resources/monitor_light.png);"));
return true;
}
}
return QWidget::eventFilter(obj, ev);
}

我的按键是非标准的上面有不少其他信息,使用我用一个label作为一个鼠标响应区别,我按上面的方法来获取鼠标的按下和是否动作,但如果鼠标按的快一些,无法全部响应。我还如何改。
...全文
255 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
呵呵。。 点快了。可能出现double clicked....

if( obj == ui->pushButton && e->type() == QEvent::MouseButtonPress)
{
qDebug() << "mouse press";
}

if( obj == ui->pushButton && e->type() == QEvent::MouseButtonRelease)
{
qDebug() << "mouse releaes";
}

if( obj == ui->pushButton && e->type() == QEvent::MouseButtonDblClick)
{
qDebug() << "mouse double clicked";
}
tt2com 2012-10-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

不可能丢啊。。丢了就推翻了我Qt的知识了哈。。。

你确定你点在了你安装的filter那个Widget上了?
[/Quote]

bool Vrf_home::eventFilter(QObject *obj, QEvent *ev)
{

if (obj==home_ui.monitor)
{
if (ev->type()==QEvent::MouseButtonRelease)
{
home_ui.monitor->setGeometry(QRect(55, 123, 106, 106));
home_ui.monitor->setStyleSheet(QString::fromUtf8("border-image: url(:/test_memory/Resources/monitor.png);"));
home_ui.label_2->setText(QString("%1").arg(++test_i));
return true;
}
else if (ev->type()==QEvent::MouseButtonPress)
{
home_ui.monitor->setGeometry(QRect(55-14, 123-14, 106+28, 106+28));
home_ui.monitor->setStyleSheet(QString::fromUtf8("border-image: url(:/test_memory/Resources/monitor_light.png);"));
home_ui.label_2->setText(QString("%1").arg(++test_i));
return true;
}
}
if (obj==home_ui.configure)
{
if (ev->type()==QEvent::MouseButtonRelease)
{
home_ui.configure->setGeometry(QRect(201, 123, 106, 106));
home_ui.configure->setStyleSheet(QString::fromUtf8("border-image: url(:/test_memory/Resources/configure.png);"));
home_ui.label_2->setText(QString("%1").arg(++test_i));
return true;
}
else if (ev->type()==QEvent::MouseButtonPress)
{
home_ui.configure->setGeometry(QRect(201-14, 123-14, 106+28, 106+28));
home_ui.configure->setStyleSheet(QString::fromUtf8("border-image: url(:/test_memory/Resources/configure_light.png);"));
home_ui.label_2->setText(QString("%1").arg(++test_i));
return true;
}
}
if (obj==home_ui.schedule_area)
{
if (ev->type()==QEvent::MouseButtonRelease)
{
home_ui.schedule_ground->setGeometry(QRect(347, 123, 106, 106));
home_ui.schedule_ground->setStyleSheet(QString::fromUtf8("border-image: url(:/test_memory/Resources/schedule.png);"));
home_ui.label_2->setText(QString("%1").arg(++test_i));
return true;
}
else if (ev->type()==QEvent::MouseButtonPress)
{
home_ui.schedule_ground->setGeometry(QRect(347-14, 123-14, 106+28, 106+28));
home_ui.schedule_ground->setStyleSheet(QString::fromUtf8("border-image: url(:/test_memory/Resources/schedule_light.png);"));
home_ui.label_2->setText(QString("%1").arg(++test_i));
return true;
}
}
if (obj==home_ui.setting)
{
if (ev->type()==QEvent::MouseButtonRelease)
{
home_ui.setting->setGeometry(QRect(493, 123, 106, 106));
home_ui.setting->setStyleSheet(QString::fromUtf8("border-image: url(:/test_memory/Resources/setting.png);"));
home_ui.label_2->setText(QString("%1").arg(++test_i));
return true;
}
else if (ev->type()==QEvent::MouseButtonPress)
{
home_ui.setting->setGeometry(QRect(493-14, 123-14, 106+28, 106+28));
home_ui.setting->setStyleSheet(QString::fromUtf8("border-image: url(:/test_memory/Resources/setting_light.png);"));
home_ui.label_2->setText(QString("%1").arg(++test_i));
return true;
}
}
if (obj==home_ui.query)
{
if (ev->type()==QEvent::MouseButtonRelease)
{
home_ui.query->setGeometry(QRect(638, 123, 106, 106));
home_ui.query->setStyleSheet(QString::fromUtf8("border-image: url(:/test_memory/Resources/query.png);"));
home_ui.label_2->setText(QString("%1").arg(++test_i));
return true;
}
else if (ev->type()==QEvent::MouseButtonPress)
{
home_ui.query->setGeometry(QRect(638-14, 123-14, 106+28, 106+28));
home_ui.query->setStyleSheet(QString::fromUtf8("border-image: url(:/test_memory/Resources/query_light.png);"));
home_ui.label_2->setText(QString("%1").arg(++test_i));
return true;
}
}
return QWidget::eventFilter(obj, ev);
}

QEvent::MouseButtonRelease 所有数据均能打印出来,
但 QEvent::MouseButtonPress的数据有不是每次都能打印,哪位指导下问题出现在那边?
tt2com 2012-10-12
  • 打赏
  • 举报
回复
我测试了下,每次都能响应,但按下和弹起的图片是有变化的,在界面上显示不出来。
也就是说鼠标连续动作,按键响应了,但图像上面则丢掉了一些,我该如何处理?
tt2com 2012-10-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

不可能丢啊。。丢了就推翻了我Qt的知识了哈。。。

你确定你点在了你安装的filter那个Widget上了?
[/Quote]
肯定安装了不然不会响应啊,我现在如果鼠标按键按的稍微快一点就会响应不到,我想知道为什么?
  • 打赏
  • 举报
回复
不可能丢啊。。丢了就推翻了我Qt的知识了哈。。。

你确定你点在了你安装的filter那个Widget上了?
tt2com 2012-10-11
  • 打赏
  • 举报
回复
哪位来教教我啊
tt2com 2012-10-11
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
C/C++ code

bool Vrf_home::eventFilter(QObject *obj, QEvent *ev)
{
if (obj==home_ui.monitor)
{
if (ev->type()==QEvent::MouseButtonRelease)
{
home_ui.monitor->setGe……
[/Quote]
响应一次丢一次

16,216

社区成员

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

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