最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

一、項(xiàng)目內(nèi)容

新建桌面應(yīng)用程序testEventFilter,類名EventFilter,基類QDialog,不勾選界面文件,通過監(jiān)視三個(gè)蝴蝶標(biāo)簽的事件達(dá)到鼠標(biāo)按下時(shí)圖片放大(縮小)的效果。

二、項(xiàng)目實(shí)現(xiàn)

  • Eventfilter.h重寫事件過濾槽函數(shù),并添加相應(yīng)的成員數(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)建布局、加載圖片、設(shè)置圖片、給部件添加布局、給圖片標(biāo)簽布局安裝事件過濾,指定當(dā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("鼠標(biāo)按下標(biāo)志"));
? ? m_stateLabel->setAlignment(Qt::AlignHCenter); ? ?//設(shè)置標(biāo)簽居中顯示
? ? //加載圖片
? ? m_image1.load(QString("../fly1.png")); //圖片存在默認(rèn)Debug目錄的上一級目錄
? ? m_image2.load(QString("../fly2.png"));
? ? m_image3.load(QString("../fly3.png"));

? ? //給標(biāo)簽設(shè)置圖片
? ? m_label1->setPixmap(QPixmap::fromImage(m_image1));
? ? m_label2->setPixmap(QPixmap::fromImage(m_image2));
? ? m_label3->setPixmap(QPixmap::fromImage(m_image3));

? ? //設(shè)置水平布局、垂直布局
? ? 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)整窗口的大小

? ? //給圖片標(biāo)簽安裝事件過濾,指定當(dāng)前窗體對象為監(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的類型,再對圖片和標(biāo)簽進(jìn)行單獨(dú)的處理。
//重寫事件過濾槽函數(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){
? ? ? ? //事件類型是鼠標(biāo)按下事件
? ? ? ? if(event->type()==QEvent::MouseButtonPress){
? ? ? ? ? ? QMouseEvent *mouseEvent=reinterpret_cast<QMouseEvent*>(event);
? ? ? ? ? ? if(mouseEvent->button()==Qt::LeftButton){
? ? ? ? ? ? ? ? m_stateLabel->setText("鼠標(biāo)左鍵按下圖片1");
? ? ? ? ? ? }else if(mouseEvent->button()==Qt::MidButton){
? ? ? ? ? ? ? ? m_stateLabel->setText("鼠標(biāo)中鍵按下圖片1");
? ? ? ? ? ? }else if(mouseEvent->button()==Qt::RightButton){
? ? ? ? ? ? ? ? m_stateLabel->setText("鼠標(biāo)右鍵按下圖片1");
? ? ? ? }
? ? ? ? ? ? //轉(zhuǎn)換圖片的比例
? ? ? ? ? ? tempImage=m_image1.transformed(matrix);
? ? ? ? ? ? m_label1->setPixmap(QPixmap::fromImage(tempImage));

? ? ? ? }
? ? ? ? //鼠標(biāo)松開事件
? ? ? ? if(event->type()==QEvent::MouseButtonRelease){
? ? ? ? ? ? m_stateLabel->setText("鼠標(biāo)松開圖片1");
? ? ? ? ? ? m_label1->setPixmap(QPixmap::fromImage(m_image1));//鼠標(biāo)松開返回本身圖片的大小
? ? ? ? }
? ? }
? ? //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("鼠標(biāo)左鍵按下圖片2");
? ? ? ? ? ? }else if(e->buttons()&Qt::MidButton){
? ? ? ? ? ? ? ? m_stateLabel->setText("鼠標(biāo)中鍵按下圖片2");
? ? ? ? ? ? }else if(e->buttons()&Qt::RightButton){
? ? ? ? ? ? ? ? m_stateLabel->setText("鼠標(biāo)右鍵按下圖片2");
? ? ? ? ? ? }
? ? ? ? ? ? tempImage=m_image2.transformed(matrix);
? ? ? ? ? ? m_label2->setPixmap(QPixmap::fromImage(tempImage));
? ? ? ? }
? ? ? ? if(event->type()==QEvent::MouseButtonRelease){
? ? ? ? ? ? m_stateLabel->setText("鼠標(biāo)松開圖片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("鼠標(biāo)左鍵按下圖片3");
? ? ? ? ? ? }else if(e->buttons()&Qt::MidButton){
? ? ? ? ? ? ? ? m_stateLabel->setText("鼠標(biāo)中鍵按下圖片3");
? ? ? ? ? ? }else if(e->buttons()&Qt::RightButton){
? ? ? ? ? ? ? ? m_stateLabel->setText("鼠標(biāo)右鍵按下圖片3");
? ? ? ? ? ? }
? ? ? ? ? ? tempImage=m_image3.transformed(matrix);
? ? ? ? ? ? m_label3->setPixmap(QPixmap::fromImage(tempImage));
? ? ? ? }
? ? ? ? if(event->type()==QEvent::MouseButtonRelease){
? ? ? ? ? ? m_stateLabel->setText("鼠標(biāo)松開圖片3");
? ? ? ? ? ? m_label3->setPixmap(QPixmap::fromImage(m_image3));
? ? ? ? }
? ? }
? ? //事件交給上層對話框進(jìn)行處理
? ? return QDialog::eventFilter(watched,event);
}

三、效果

  • 點(diǎn)擊任意一張圖片(鼠標(biāo)不松開)均可放大查看;
  • 鼠標(biāo)松開,圖片返回原來的大小
  • 標(biāo)簽m_stateLabel 提示當(dāng)前操作的圖片類型

1、初始化圖片:

2、點(diǎn)擊圖片1:

3、點(diǎn)擊圖片2:

4、鼠標(biāo)松開第二張圖片:

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

相關(guān)文章

  • VCPKG安裝和使用教程(經(jīng)驗(yàn)總結(jié))

    VCPKG安裝和使用教程(經(jīng)驗(yàn)總結(jié))

    這篇文章主要介紹了VCPKG安裝和使用教程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-01-01
  • C++交換指針實(shí)例

    C++交換指針實(shí)例

    這篇文章主要介紹了C++交換指針實(shí)例,針對C與C++交換指針的方法進(jìn)行了較為詳細(xì)的對比分析,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10
  • Qt 信號自定義槽函數(shù)的實(shí)現(xiàn)

    Qt 信號自定義槽函數(shù)的實(shí)現(xiàn)

    Qt中實(shí)現(xiàn)自定義信號與槽函數(shù),信號用于發(fā)送并觸發(fā)槽函數(shù),槽函數(shù)則是具體的功能實(shí)現(xiàn),本文就詳細(xì)的介紹一下如何使用,感興趣的可以了解一下
    2021-11-11
  • C語言當(dāng)函數(shù)執(zhí)行成功時(shí)return1還是0

    C語言當(dāng)函數(shù)執(zhí)行成功時(shí)return1還是0

    本文主要介紹了C語言當(dāng)函數(shù)執(zhí)行成功時(shí)return1還是0,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • C語言與C++中內(nèi)存管理詳解

    C語言與C++中內(nèi)存管理詳解

    本章主要介紹C語言與C++的內(nèi)存管理,以C++的內(nèi)存分布作為引入,介紹C++不同于C語言的內(nèi)存管理方式(new?delete對比?malloc?free),感興趣的朋友來看看吧
    2022-04-04
  • C++11 寫一個(gè)只觸發(fā)一次槽函數(shù)的Qt connect函數(shù)

    C++11 寫一個(gè)只觸發(fā)一次槽函數(shù)的Qt connect函數(shù)

    這篇文章主要為大家介紹了C++11 寫一個(gè)只觸發(fā)一次槽函數(shù)的Qt connect函數(shù)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • C語言實(shí)現(xiàn)酒店客房管理系統(tǒng)課程設(shè)計(jì)

    C語言實(shí)現(xiàn)酒店客房管理系統(tǒng)課程設(shè)計(jì)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)酒店客房管理系統(tǒng)課程設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • c++ vector 常用函數(shù)示例解析

    c++ vector 常用函數(shù)示例解析

    這篇文章主要介紹了c++ vector 常用函數(shù)示例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • C++使用easyx實(shí)現(xiàn)打磚塊游戲

    C++使用easyx實(shí)現(xiàn)打磚塊游戲

    這篇文章主要為大家詳細(xì)介紹了C++使用easyx實(shí)現(xiàn)打磚塊游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Qt使用事件與定時(shí)器實(shí)現(xiàn)字幕滾動(dòng)效果

    Qt使用事件與定時(shí)器實(shí)現(xiàn)字幕滾動(dòng)效果

    我們經(jīng)常能夠在外面看到那種滾動(dòng)字幕,那么本文就拿Qt來做一個(gè)吧,本文將使用事件與定時(shí)器實(shí)現(xiàn)字幕滾動(dòng)的效果,感興趣的小伙伴可以了解一下
    2023-06-06

最新評論

大名县| 吉木萨尔县| 卓尼县| 东兰县| 巴东县| 阳春市| 民权县| 罗甸县| 大连市| 南陵县| 葵青区| 崇文区| 太康县| 丹江口市| 定边县| 寿光市| 临夏市| 米脂县| 浦城县| 渝北区| 比如县| 德庆县| 云阳县| 东平县| 韶山市| 新建县| 海原县| 宜州市| 永和县| 沂南县| 博客| 宁明县| 中宁县| 南岸区| 道真| 九江市| 灯塔市| 平湖市| 安仁县| 潼南县| 钦州市|