#include "eventfilter.h"
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QMouseEvent>
#include <QMatrix>
EventFilter::EventFilter(QWidget *parent,Qt::WindowFlags f)
: QDialog(parent,f)
{
setWindowTitle(tr("事件过滤"));
label1 = new QLabel;
Image1.load("../image/1.png");
label1->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
label1->setPixmap(QPixmap::fromImage(Image1));
label2 = new QLabel;
Image2.load("../image/2.png");
label2->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
label2->setPixmap(QPixmap::fromImage(Image2));
label3 = new QLabel;
Image3.load("../image/3.png");
label3->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
label3->setPixmap(QPixmap::fromImage(Image3));
stateLabel = new QLabel(tr("鼠标按下标志"));
stateLabel->setAlignment(Qt::AlignHCenter);
QHBoxLayout *layout=new QHBoxLayout;
layout->addWidget(label1);
layout->addWidget(label2);
layout->addWidget(label3);
QVBoxLayout *mainLayout = new QVBoxLayout(this);
mainLayout->addLayout(layout);
mainLayout->addWidget(stateLabel);
label1->installEventFilter(this);
label2->installEventFilter(this);
label3->installEventFilter(this);
}
bool EventFilter::eventFilter(QObject *watched, QEvent *event)
{
if(watched==label1) //首先判断当前发生事件的对象
{
//判断发生的事件类型
if(event->type()==QEvent::MouseButtonPress)
{
//将事件event转化为鼠标事件
QMouseEvent *mouseEvent=(QMouseEvent *)event;
/* 以下根据鼠标的按键类型分别显示 */
if(mouseEvent->buttons()&Qt::LeftButton)
{
stateLabel->setText(tr("左键按下左边图片"));
}
else if(mouseEvent->buttons()&Qt::MidButton)
{
stateLabel->setText(tr("中键按下左边图片"));
}
else if(mouseEvent->buttons()&Qt::RightButton)
{
stateLabel->setText(tr("右键按下左边图片"));
}
/* 显示缩小的图片 */
QMatrix matrix;
matrix.scale(1.8,1.8);
QImage tmpImg=Image1.transformed(matrix);
label1->setPixmap(QPixmap::fromImage(tmpImg));
}
/* 鼠标释放事件的处理,恢复图片的大小 */
if(event->type()==QEvent::MouseButtonRelease)
{
stateLabel->setText(tr("鼠标释放左边图片"));
label1->setPixmap(QPixmap::fromImage(Image1));
}
}
else if(watched==label2)
{
if(event->type()==QEvent::MouseButtonPress)
{
//将事件event转化为鼠标事件
QMouseEvent *mouseEvent=(QMouseEvent *)event;
/* 以下根据鼠标的按键类型分别显示 */
if(mouseEvent->buttons()&Qt::LeftButton)
{
stateLabel->setText(tr("左键按下中间图片"));
}
else if(mouseEvent->buttons()&Qt::MidButton)
{
stateLabel->setText(tr("中键按下中间图片"));
}
else if(mouseEvent->buttons()&Qt::RightButton)
{
stateLabel->setText(tr("右键按下中间图片"));
}
/* 显示缩小的图片 */
QMatrix matrix;
matrix.scale(1.8,1.8);
QImage tmpImg=Image2.transformed(matrix);
label2->setPixmap(QPixmap::fromImage(tmpImg));
}
/* 鼠标释放事件的处理,恢复图片的大小 */
if(event->type()==QEvent::MouseButtonRelease)
{
stateLabel->setText(tr("鼠标释放中间图片"));
label2->setPixmap(QPixmap::fromImage(Image2));
}
}
else if(watched==label3)
{
if(event->type()==QEvent::MouseButtonPress)
{
//将事件event转化为鼠标事件
QMouseEvent *mouseEvent=(QMouseEvent *)event;
/* 以下根据鼠标的按键类型分别显示 */
if(mouseEvent->buttons()&Qt::LeftButton)
{
stateLabel->setText(tr("左键按下右边图片"));
}
else if(mouseEvent->buttons()&Qt::MidButton)
{
stateLabel->setText(tr("中键按下右边图片"));
}
else if(mouseEvent->buttons()&Qt::RightButton)
{
stateLabel->setText(tr("右键按下右边图片"));
}
/* 显示缩小的图片 */
QMatrix matrix;
matrix.scale(1.8,1.8);
QImage tmpImg=Image3.transformed(matrix);
label3->setPixmap(QPixmap::fromImage(tmpImg));
}
/* 鼠标释放事件的处理,恢复图片的大小 */
if(event->type()==QEvent::MouseButtonRelease)
{
stateLabel->setText(tr("鼠标释放右边图片"));
label3->setPixmap(QPixmap::fromImage(Image3));
}
}
//将事件交给上层对话框
return QDialog::eventFilter(watched,event);
}
EventFilter::~EventFilter()
{
}
没有合适的资源?快使用搜索试试~ 我知道了~
Qt5开发及实例-CH1103.rar,Qt5通过事件过滤器实现动态图片按钮效果的代码
共14个文件
png:6个
cpp:2个
db:2个
需积分: 1 0 下载量 180 浏览量
2023-09-15
17:47:09
上传
评论
收藏 149KB RAR 举报
温馨提示
Qt5开发及实例,实例CH1103,通过事件过滤器实现动态图片按钮效果,如图11.7所示。 实现步骤如下。 (1)头文件“eventfilter.h”中声明了所需的各种控件及槽函数,其具体代码; (2)源文件“eventfilter.cpp”的具体代码。 其中,installEventFilter()为每一个图片安装事件过滤器,指定整个窗体为监视事件的对象,函数原型如下: void QObject::installEventFilter ( QObject * filterObj ) QObject的removeEventFilter()可以解除已安装的事件过滤器。 (3)资源文件的添加如上例演示的步骤,不再赘述。 (4)QObject的事件监视函数eventFilter()的具体实现代码。 (5)运行结果如图11.7所示。
资源推荐
资源详情
资源评论
收起资源包目录
Qt5开发及实例_CH1103.rar (14个子文件)
CH1103
image
Thumbs.db 12KB
3.png 30KB
1.png 15KB
2.png 19KB
EventFilter
eventfilter.cpp 5KB
EventFilter.pro 1KB
image
Thumbs.db 12KB
3.png 30KB
1.png 15KB
2.png 19KB
main.cpp 185B
eventfilter.qrc 174B
EventFilter.pro.user 23KB
eventfilter.h 517B
共 14 条
- 1
资源评论
华为奋斗者精神
- 粉丝: 8109
- 资源: 241
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功