第11章:FilterEvent

1,事件过滤FilterEvent

2,源码:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QLabel>
#include <QImage>
#include <QEvent>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QMouseEvent>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
public slots:
    bool eventFilter(QObject *watched, QEvent *event);

private:
    Ui::MainWindow *ui;
    QLabel *label1;
    QLabel *label2;
    QLabel *label3;

    QLabel *stateLabel;

    QImage image1;
    QImage image2;
    QImage image3;

};

#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->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);

    ui->centralWidget->setLayout(mainLayout);

    label1->installEventFilter(this);
    label2->installEventFilter(this);
    label3->installEventFilter(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}



//滤波事件
bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
    if (watched == label1)
    {
        if (event->type() == QEvent::MouseButtonPress)
        {
            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)
        {
            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)
        {
            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));
        }
    }
}

3,效果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/ksmtnsv37297/article/details/86674295