如何通过Qt事件过滤实现点击图片的长尾词搜索功能?

2026-04-18 14:474阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1305个文字,预计阅读时间需要6分钟。

如何通过Qt事件过滤实现点击图片的长尾词搜索功能?

本文以实例方式分享了Qt事件过滤实现点击图片放大和缩小的具体代码。以下是大致的实现步骤和内容:

+ Qt事件过滤实现点击图片放大和缩小的代码示例:

cpp#include #include #include #include #include

class ImageWidget : public QLabel {public: ImageWidget(QWidget *parent=nullptr) : QLabel(parent) { setPixmap(QPixmap(:/image.jpg)); setAlignment(Qt::AlignCenter); }

如何通过Qt事件过滤实现点击图片的长尾词搜索功能?

protected: bool eventFilter(QObject *watched, QEvent *event) override { if (event->type()==QEvent::MouseButtonPress) { QMouseEvent *mouseEvent=static_cast(event); if (mouseEvent->button()==Qt::LeftButton) { // 根据鼠标位置放大或缩小图片 if (mouseEvent->pos().x()

int main(int argc, char *argv[]) { QApplication app(argc, argv);

ImageWidget imageWidget; imageWidget.resize(400, 300); imageWidget.show();

return app.exec();}

+ 标签:(空格分隔)

eventFilter 事件过滤 一 项

本文实例为大家分享了Qt事件过滤实现点击图片放大和缩小的具体代码,供大家参考,具体内容如下

Qt事件过滤实现点击图片的放大查看

标签(空格分隔): eventFilter 事件过滤

一、项目内容

新建桌面应用程序testEventFilter,类名EventFilter,基类QDialog,不勾选界面文件,通过监视三个蝴蝶标签的事件达到鼠标按下时图片放大(缩小)的效果。

二、项目实现

  • Eventfilter.h重写事件过滤槽函数,并添加相应的成员数据。

#ifndef EVENTFILTER_H #define EVENTFILTER_H #include <QLabel> #include <QImage> #include <QDialog> class EventFilter : public QDialog {     Q_OBJECT public:     EventFilter(QWidget *parent = nullptr,Qt::WindowFlags f=0);     ~EventFilter(); public slots:     bool eventFilter(QObject *watched, QEvent *event) override; private:     QLabel *m_label1;       //显示图片1     QLabel *m_label2;       //显示图片2     QLabel *m_label3;       //显示图片3     QLabel *m_stateLabel;   //用于显示按下、松开的是哪一张图片     QImage m_image1;     QImage m_image2;     QImage m_image3; }; #endif // EVENTFILTER_H

  • 构造函数(创建布局、加载图片、设置图片、给部件添加布局、给图片标签布局安装事件过滤,指定当前窗体对象为监视事件的对象)

EventFilter::EventFilter(QWidget *parent,Qt::WindowFlags f)     : QDialog(parent,f) {     setWindowTitle("事件过滤");     m_label1=new QLabel;     m_label2=new QLabel;     m_label3=new QLabel;     m_stateLabel=new QLabel(QString("鼠标按下标志"));     m_stateLabel->setAlignment(Qt::AlignHCenter);    //设置标签居中显示     //加载图片     m_image1.load(QString("../fly1.png")); //图片存在默认Debug目录的上一级目录     m_image2.load(QString("../fly2.png"));     m_image3.load(QString("../fly3.png"));     //给标签设置图片     m_label1->setPixmap(QPixmap::fromImage(m_image1));     m_label2->setPixmap(QPixmap::fromImage(m_image2));     m_label3->setPixmap(QPixmap::fromImage(m_image3));     //设置水平布局、垂直布局     QHBoxLayout *hLayout=new QHBoxLayout;     hLayout->addWidget(m_label1);     hLayout->addWidget(m_label2);     hLayout->addWidget(m_label3);     QVBoxLayout *mainLayout=new QVBoxLayout(this);     mainLayout->addLayout(hLayout);     mainLayout->addWidget(m_stateLabel);     resize(m_image2.width()*3,m_image2.height()*2);//调整窗口的大小     //给图片标签安装事件过滤,指定当前窗体对象为监视事件的对象     m_label1->installEventFilter(this);     m_label2->installEventFilter(this);     m_label3->installEventFilter(this); }

  • 重写事件过滤槽函数,watched为被监视对象,通过判断watched对象是m_label1、m_label2、m_label3,判断事件对象event的类型,再对图片和标签进行单独的处理。

//重写事件过滤槽函数,watched为被监视对象 bool EventFilter::eventFilter(QObject *watched, QEvent *event) {     QMatrix matrix;     QImage tempImage;//保存放大过后的图片     matrix.scale(2.0,2.0);//放大两倍     if(watched==m_label1){         //事件类型是鼠标按下事件         if(event->type()==QEvent::MouseButtonPress){             QMouseEvent *mouseEvent=reinterpret_cast<QMouseEvent*>(event);             if(mouseEvent->button()==Qt::LeftButton){                 m_stateLabel->setText("鼠标左键按下图片1");             }else if(mouseEvent->button()==Qt::MidButton){                 m_stateLabel->setText("鼠标中键按下图片1");             }else if(mouseEvent->button()==Qt::RightButton){                 m_stateLabel->setText("鼠标右键按下图片1");         }             //转换图片的比例             tempImage=m_image1.transformed(matrix);             m_label1->setPixmap(QPixmap::fromImage(tempImage));         }         //鼠标松开事件         if(event->type()==QEvent::MouseButtonRelease){             m_stateLabel->setText("鼠标松开图片1");             m_label1->setPixmap(QPixmap::fromImage(m_image1));//鼠标松开返回本身图片的大小         }     }     //m_label2、m_label2的处理过程同m_label1相同     else if(watched==m_label2){         if(event->type()==QEvent::MouseButtonPress){             QMouseEvent *e=reinterpret_cast<QMouseEvent*>(event);             if(e->buttons()&Qt::LeftButton){                 m_stateLabel->setText("鼠标左键按下图片2");             }else if(e->buttons()&Qt::MidButton){                 m_stateLabel->setText("鼠标中键按下图片2");             }else if(e->buttons()&Qt::RightButton){                 m_stateLabel->setText("鼠标右键按下图片2");             }             tempImage=m_image2.transformed(matrix);             m_label2->setPixmap(QPixmap::fromImage(tempImage));         }         if(event->type()==QEvent::MouseButtonRelease){             m_stateLabel->setText("鼠标松开图片2");             m_label2->setPixmap(QPixmap::fromImage(m_image2));         }     }     else if(watched==m_label3){         if(event->type()==QEvent::MouseButtonPress){             QMouseEvent *e=reinterpret_cast<QMouseEvent*>(event);             if(e->buttons()&Qt::LeftButton){                 m_stateLabel->setText("鼠标左键按下图片3");             }else if(e->buttons()&Qt::MidButton){                 m_stateLabel->setText("鼠标中键按下图片3");             }else if(e->buttons()&Qt::RightButton){                 m_stateLabel->setText("鼠标右键按下图片3");             }             tempImage=m_image3.transformed(matrix);             m_label3->setPixmap(QPixmap::fromImage(tempImage));         }         if(event->type()==QEvent::MouseButtonRelease){             m_stateLabel->setText("鼠标松开图片3");             m_label3->setPixmap(QPixmap::fromImage(m_image3));         }     }     //事件交给上层对话框进行处理     return QDialog::eventFilter(watched,event); }

三、效果

  • 点击任意一张图片(鼠标不松开)均可放大查看;
  • 鼠标松开,图片返回原来的大小
  • 标签m_stateLabel 提示当前操作的图片类型

1、初始化图片:

2、点击图片1:

3、点击图片2:

4、鼠标松开第二张图片:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。

本文共计1305个文字,预计阅读时间需要6分钟。

如何通过Qt事件过滤实现点击图片的长尾词搜索功能?

本文以实例方式分享了Qt事件过滤实现点击图片放大和缩小的具体代码。以下是大致的实现步骤和内容:

+ Qt事件过滤实现点击图片放大和缩小的代码示例:

cpp#include #include #include #include #include

class ImageWidget : public QLabel {public: ImageWidget(QWidget *parent=nullptr) : QLabel(parent) { setPixmap(QPixmap(:/image.jpg)); setAlignment(Qt::AlignCenter); }

如何通过Qt事件过滤实现点击图片的长尾词搜索功能?

protected: bool eventFilter(QObject *watched, QEvent *event) override { if (event->type()==QEvent::MouseButtonPress) { QMouseEvent *mouseEvent=static_cast(event); if (mouseEvent->button()==Qt::LeftButton) { // 根据鼠标位置放大或缩小图片 if (mouseEvent->pos().x()

int main(int argc, char *argv[]) { QApplication app(argc, argv);

ImageWidget imageWidget; imageWidget.resize(400, 300); imageWidget.show();

return app.exec();}

+ 标签:(空格分隔)

eventFilter 事件过滤 一 项

本文实例为大家分享了Qt事件过滤实现点击图片放大和缩小的具体代码,供大家参考,具体内容如下

Qt事件过滤实现点击图片的放大查看

标签(空格分隔): eventFilter 事件过滤

一、项目内容

新建桌面应用程序testEventFilter,类名EventFilter,基类QDialog,不勾选界面文件,通过监视三个蝴蝶标签的事件达到鼠标按下时图片放大(缩小)的效果。

二、项目实现

  • Eventfilter.h重写事件过滤槽函数,并添加相应的成员数据。

#ifndef EVENTFILTER_H #define EVENTFILTER_H #include <QLabel> #include <QImage> #include <QDialog> class EventFilter : public QDialog {     Q_OBJECT public:     EventFilter(QWidget *parent = nullptr,Qt::WindowFlags f=0);     ~EventFilter(); public slots:     bool eventFilter(QObject *watched, QEvent *event) override; private:     QLabel *m_label1;       //显示图片1     QLabel *m_label2;       //显示图片2     QLabel *m_label3;       //显示图片3     QLabel *m_stateLabel;   //用于显示按下、松开的是哪一张图片     QImage m_image1;     QImage m_image2;     QImage m_image3; }; #endif // EVENTFILTER_H

  • 构造函数(创建布局、加载图片、设置图片、给部件添加布局、给图片标签布局安装事件过滤,指定当前窗体对象为监视事件的对象)

EventFilter::EventFilter(QWidget *parent,Qt::WindowFlags f)     : QDialog(parent,f) {     setWindowTitle("事件过滤");     m_label1=new QLabel;     m_label2=new QLabel;     m_label3=new QLabel;     m_stateLabel=new QLabel(QString("鼠标按下标志"));     m_stateLabel->setAlignment(Qt::AlignHCenter);    //设置标签居中显示     //加载图片     m_image1.load(QString("../fly1.png")); //图片存在默认Debug目录的上一级目录     m_image2.load(QString("../fly2.png"));     m_image3.load(QString("../fly3.png"));     //给标签设置图片     m_label1->setPixmap(QPixmap::fromImage(m_image1));     m_label2->setPixmap(QPixmap::fromImage(m_image2));     m_label3->setPixmap(QPixmap::fromImage(m_image3));     //设置水平布局、垂直布局     QHBoxLayout *hLayout=new QHBoxLayout;     hLayout->addWidget(m_label1);     hLayout->addWidget(m_label2);     hLayout->addWidget(m_label3);     QVBoxLayout *mainLayout=new QVBoxLayout(this);     mainLayout->addLayout(hLayout);     mainLayout->addWidget(m_stateLabel);     resize(m_image2.width()*3,m_image2.height()*2);//调整窗口的大小     //给图片标签安装事件过滤,指定当前窗体对象为监视事件的对象     m_label1->installEventFilter(this);     m_label2->installEventFilter(this);     m_label3->installEventFilter(this); }

  • 重写事件过滤槽函数,watched为被监视对象,通过判断watched对象是m_label1、m_label2、m_label3,判断事件对象event的类型,再对图片和标签进行单独的处理。

//重写事件过滤槽函数,watched为被监视对象 bool EventFilter::eventFilter(QObject *watched, QEvent *event) {     QMatrix matrix;     QImage tempImage;//保存放大过后的图片     matrix.scale(2.0,2.0);//放大两倍     if(watched==m_label1){         //事件类型是鼠标按下事件         if(event->type()==QEvent::MouseButtonPress){             QMouseEvent *mouseEvent=reinterpret_cast<QMouseEvent*>(event);             if(mouseEvent->button()==Qt::LeftButton){                 m_stateLabel->setText("鼠标左键按下图片1");             }else if(mouseEvent->button()==Qt::MidButton){                 m_stateLabel->setText("鼠标中键按下图片1");             }else if(mouseEvent->button()==Qt::RightButton){                 m_stateLabel->setText("鼠标右键按下图片1");         }             //转换图片的比例             tempImage=m_image1.transformed(matrix);             m_label1->setPixmap(QPixmap::fromImage(tempImage));         }         //鼠标松开事件         if(event->type()==QEvent::MouseButtonRelease){             m_stateLabel->setText("鼠标松开图片1");             m_label1->setPixmap(QPixmap::fromImage(m_image1));//鼠标松开返回本身图片的大小         }     }     //m_label2、m_label2的处理过程同m_label1相同     else if(watched==m_label2){         if(event->type()==QEvent::MouseButtonPress){             QMouseEvent *e=reinterpret_cast<QMouseEvent*>(event);             if(e->buttons()&Qt::LeftButton){                 m_stateLabel->setText("鼠标左键按下图片2");             }else if(e->buttons()&Qt::MidButton){                 m_stateLabel->setText("鼠标中键按下图片2");             }else if(e->buttons()&Qt::RightButton){                 m_stateLabel->setText("鼠标右键按下图片2");             }             tempImage=m_image2.transformed(matrix);             m_label2->setPixmap(QPixmap::fromImage(tempImage));         }         if(event->type()==QEvent::MouseButtonRelease){             m_stateLabel->setText("鼠标松开图片2");             m_label2->setPixmap(QPixmap::fromImage(m_image2));         }     }     else if(watched==m_label3){         if(event->type()==QEvent::MouseButtonPress){             QMouseEvent *e=reinterpret_cast<QMouseEvent*>(event);             if(e->buttons()&Qt::LeftButton){                 m_stateLabel->setText("鼠标左键按下图片3");             }else if(e->buttons()&Qt::MidButton){                 m_stateLabel->setText("鼠标中键按下图片3");             }else if(e->buttons()&Qt::RightButton){                 m_stateLabel->setText("鼠标右键按下图片3");             }             tempImage=m_image3.transformed(matrix);             m_label3->setPixmap(QPixmap::fromImage(tempImage));         }         if(event->type()==QEvent::MouseButtonRelease){             m_stateLabel->setText("鼠标松开图片3");             m_label3->setPixmap(QPixmap::fromImage(m_image3));         }     }     //事件交给上层对话框进行处理     return QDialog::eventFilter(watched,event); }

三、效果

  • 点击任意一张图片(鼠标不松开)均可放大查看;
  • 鼠标松开,图片返回原来的大小
  • 标签m_stateLabel 提示当前操作的图片类型

1、初始化图片:

2、点击图片1:

3、点击图片2:

4、鼠标松开第二张图片:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。