亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Qt事件過濾實現(xiàn)點擊圖片的放大和縮小

 更新時間:2022年08月18日 15:33:12   作者:喝水怪~  
這篇文章主要為大家詳細介紹了Qt事件過濾實現(xiàn)點擊圖片的放大和縮小,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Qt事件過濾實現(xiàn)點擊圖片放大和縮小的具體代碼,供大家參考,具體內(nèi)容如下

Qt事件過濾實現(xiàn)點擊圖片的放大查看

標簽(空格分隔): eventFilter 事件過濾

一、項目內(nèi)容

新建桌面應用程序testEventFilter,類名EventFilter,基類QDialog,不勾選界面文件,通過監(jiān)視三個蝴蝶標簽的事件達到鼠標按下時圖片放大(縮?。┑男Ч?/p>

二、項目實現(xiàn)

  • Eventfilter.h重寫事件過濾槽函數(shù),并添加相應的成員數(shù)據(jù)。
#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
  • 構(gòu)造函數(shù)(創(chuàng)建布局、加載圖片、設置圖片、給部件添加布局、給圖片標簽布局安裝事件過濾,指定當前窗體對象為監(jiān)視事件的對象)
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);//調(diào)整窗口的大小

? ? //給圖片標簽安裝事件過濾,指定當前窗體對象為監(jiān)視事件的對象
? ? m_label1->installEventFilter(this);
? ? m_label2->installEventFilter(this);
? ? m_label3->installEventFilter(this);


}
  • 重寫事件過濾槽函數(shù),watched為被監(jiān)視對象,通過判斷watched對象是m_label1、m_label2、m_label3,判斷事件對象event的類型,再對圖片和標簽進行單獨的處理。
//重寫事件過濾槽函數(shù),watched為被監(jiān)視對象
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");
? ? ? ? }
? ? ? ? ? ? //轉(zhuǎn)換圖片的比例
? ? ? ? ? ? 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、鼠標松開第二張圖片:

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • C++中的函數(shù)指針與函數(shù)對象的總結(jié)

    C++中的函數(shù)指針與函數(shù)對象的總結(jié)

    以下是對C++中的函數(shù)指針與函數(shù)對象的使用進行了詳細的分析介紹,需要的朋友可以參考下
    2013-07-07
  • C語言實現(xiàn)電話簿項目

    C語言實現(xiàn)電話簿項目

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)電話簿項目,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • C語言進階:指針的進階(4)

    C語言進階:指針的進階(4)

    這篇文章主要介紹了C語言指針詳解及用法示例,介紹了其相關概念,然后分享了幾種用法,具有一定參考價值。需要的朋友可以了解下
    2021-09-09
  • C語言實現(xiàn)通用數(shù)據(jù)結(jié)構(gòu)之通用椎棧

    C語言實現(xiàn)通用數(shù)據(jù)結(jié)構(gòu)之通用椎棧

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)通用數(shù)據(jù)結(jié)構(gòu)之通用椎棧,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • QT實戰(zhàn)之實現(xiàn)圖片瀏覽系統(tǒng)

    QT實戰(zhàn)之實現(xiàn)圖片瀏覽系統(tǒng)

    這篇文章主要介紹了如何利用QT編寫一個圖片瀏覽系統(tǒng),可以支持自動播放,左右拖動切換,點擊列表切換,點擊按鈕切換等功能,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-04-04
  • Qt中CQGUI框架之陰影圓角窗口實現(xiàn)

    Qt中CQGUI框架之陰影圓角窗口實現(xiàn)

    這篇文章主要介紹了Qt中CQGUI框架之陰影圓角窗口實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • C++生成隨機浮點數(shù)的示例代碼

    C++生成隨機浮點數(shù)的示例代碼

    在C++11之前,我們通常采用rand函數(shù)來生成隨機數(shù),但rand函數(shù)對一些情況顯得難以處理。本文將介紹如何利用C++生成隨機浮點數(shù),需要的可以參考一下
    2022-04-04
  • 深入淺析OpenCV?copyTo()函數(shù)

    深入淺析OpenCV?copyTo()函數(shù)

    在Mat矩陣類的成員函數(shù)中copyTo(roi , mask)函數(shù)是非常有用的一個函數(shù),尤其是后面的mask可以實現(xiàn)蒙版的功能,下面通過本文給大家介紹下OpenCV copyTo()函數(shù)的相關知識,感興趣的朋友一起看看吧
    2022-01-01
  • 如何為Qt視圖中的文字實現(xiàn)彩虹漸變效果

    如何為Qt視圖中的文字實現(xiàn)彩虹漸變效果

    這篇文章主要給大家介紹了關于如何為Qt視圖中的文字實現(xiàn)彩虹漸變效果的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用Qt具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-03-03
  • C++事件處理中__event與__raise關鍵字的用法講解

    C++事件處理中__event與__raise關鍵字的用法講解

    這篇文章主要介紹了C++事件處理中__event與__raise關鍵字的用法,是C++入門學習中的基礎知識,需要的朋友可以參考下
    2016-01-01

最新評論