<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了Qt事件過濾實現點選圖片放大和縮小的具體程式碼,供大家參考,具體內容如下
Qt事件過濾實現點選圖片的放大檢視
標籤(空格分隔): eventFilter 事件過濾
新建桌面應用程式testEventFilter,類名EventFilter,基礎類別QDialog,不勾選介面檔案,通過監視三個蝴蝶標籤的事件達到滑鼠按下時圖片放大(縮小)的效果。
#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為被監視物件 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); }
1、初始化圖片:
2、點選圖片1:
3、點選圖片2:
4、滑鼠鬆開第二張圖片:
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45