国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

QGraphicsView中重寫(xiě)鼠標(biāo)事件實(shí)現(xiàn)圖片的移動(dòng)

這篇具有很好參考價(jià)值的文章主要介紹了QGraphicsView中重寫(xiě)鼠標(biāo)事件實(shí)現(xiàn)圖片的移動(dòng)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

????????本文講的是如何在PyQt5的組件QGraphicsView中重寫(xiě)鼠標(biāo)事件實(shí)現(xiàn)圖片的移動(dòng)。

????????PyQt5作為強(qiáng)大的GUI編程工具,免不了會(huì)拿來(lái)做一些圖片的顯示和處理問(wèn)題,有的會(huì)使用QPainter作為動(dòng)態(tài)顯示圖片的工具,QLabel是顯示靜態(tài)圖片的主推。但是我在工作中遇到了超大tiff圖片的處理,一次顯示1G大小的圖片進(jìn)行灰度變換與標(biāo)記等工作,這就需要專(zhuān)業(yè)的圖片處理Qt的QGraphicsView模塊。

????????QGraphicsView專(zhuān)業(yè)到已經(jīng)封裝好了一個(gè)鼠標(biāo)移動(dòng)事件,也就是一句代碼:

????????

self.ui.graphicsView.setDragMode(QGraphicsView.ScrollerHandDrag)

? ? ? ??elf.ui.graphicsView是我的類(lèi)里面的一個(gè)QGraphicsView的窗口,你們自己的類(lèi)里面自己命名的QGraphicsView換一下對(duì)應(yīng)的名字就行。

? ? ? ? 但是這個(gè)函數(shù)由于是封裝好的,已經(jīng)占用了mousePressEvent、mouseMoveEvent、mouseReleaseEvent三個(gè)方法,這就導(dǎo)致一個(gè)很令人難受的結(jié)果,你要是使用拖動(dòng)效果,就只能實(shí)現(xiàn)拖動(dòng)效果,自定義任意一個(gè)鼠標(biāo)事件都會(huì)到時(shí)這句代碼的效果失效。沒(méi)辦法,為了實(shí)現(xiàn)更多的功能,我們要重寫(xiě)移動(dòng)事件。



# -*- coding: utf-8 -*-
"""
@author:xiaoyangchicao2020
@time:2022-99-99
"""
self.imgopened = False
self.leftpressed = False
self.scalenum = 5    
def mouse_press(self, event):
        button = event.button()
        if button == qc.Qt.LeftButton:
            self.leftpressed = True
            self.startpos = self.ui.graphicsView.mapToScene(event.pos())

    def mouse_move(self,event):
        if  self.leftpressed ==True:
            self.endpos = self.ui.graphicsView.mapToScene(event.pos())
            oposx = self.ui.graphicsView.horizontalScrollBar().value()
            oposy = self.ui.graphicsView.verticalScrollBar().value()
            offset = self.endpos - self.startpos
            nposx = oposx - offset.x() * self.scalenum
            nposy = oposy - offset.y() * self.scalenum
            self.ui.graphicsView.horizontalScrollBar().setValue(nposx)
            self.ui.graphicsView.verticalScrollBar().setValue(nposy)

    def mouse_release(self, event):
        button = event.button()
        if button == qc.Qt.LeftButton:
            self.leftpressed = False

? ? ? ? 鼠標(biāo)事件包含三個(gè)子事件,很不錯(cuò)的是,所有事件都可由通過(guò)event參數(shù)來(lái)調(diào)用和返回,這就提供了我們自定義函數(shù)的很大的空間。

? ? ? ? 下面是代碼的解釋。

????????先是mousePressEvent,按下的時(shí)候會(huì)發(fā)生什么。我在上面定義了是否按下的一個(gè)布爾值,只有在左鍵點(diǎn)擊之后變?yōu)門(mén)rue才能進(jìn)行下面代碼的操作。這個(gè)時(shí)候返回現(xiàn)在鼠標(biāo)點(diǎn)擊的坐標(biāo),為了后續(xù)操作打基礎(chǔ)。

? ? ? ? 再是移動(dòng)事件,為了使移動(dòng)變得順暢,我們每移動(dòng)一次鼠標(biāo)就要進(jìn)行一次圖片的重繪,而重繪的偏移量就是鼠標(biāo)結(jié)束坐標(biāo)減去鼠標(biāo)的開(kāi)始坐標(biāo),這樣,在按下左鍵之后,只要鼠標(biāo)移動(dòng),就一直重繪。

? ? ? ? 最后是結(jié)束事件,開(kāi)始的時(shí)候bool值變成了True,那么鼠標(biāo)釋放的時(shí)候就要改成False,不然等你放松之后,依然會(huì)保持按住的情況松不開(kāi)。

? ? ? ? 參數(shù)解釋?zhuān)旧献兞棵帜鼐鸵呀?jīng)給出了解釋?zhuān)恍枰⒁鈓apToScene(event.pos())、horizontalScrollBar().value()、verticalScrollBar().value()三個(gè)方法的含義就行,去看官方文檔,如果你嫌麻煩就是把self.ui.graphicsView改成你的類(lèi)里面的那個(gè)QGraphicsView的名字就行。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-413269.html

到了這里,關(guān)于QGraphicsView中重寫(xiě)鼠標(biāo)事件實(shí)現(xiàn)圖片的移動(dòng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • QGraphicsView如何使圖片以鼠標(biāo)為中心進(jìn)行放縮

    順帶說(shuō)一句,下面的代碼放在了一個(gè)繼承了QMainWindow的自定義class里面,這個(gè)類(lèi)包含著一個(gè)QGraphicsView部件,所有以下的代碼都會(huì)以為處在類(lèi)中而出現(xiàn)對(duì)應(yīng)的首行縮進(jìn)。 因?yàn)镼GraphicsView是從Qt整個(gè)改過(guò)來(lái)的,自然包含了所有的部件,其中就有所用到的三句話(huà): self.ui.graphicsView.se

    2024年02月13日
    瀏覽(29)
  • 【虛幻引擎】UE4/UE5鼠標(biāo)點(diǎn)擊事件實(shí)現(xiàn)物體移動(dòng)

    【虛幻引擎】UE4/UE5鼠標(biāo)點(diǎn)擊事件實(shí)現(xiàn)物體移動(dòng)

    ?在UE4/UE5中,引擎有它自己的一套框架體系,虛幻就是基于這一個(gè)框架體系來(lái)實(shí)現(xiàn)的。其中就有PlayerController(玩家控制器),玩家控制器中就有對(duì)鼠標(biāo)的一系列設(shè)置,包括顯示鼠標(biāo),允許點(diǎn)擊事件等。 ?1.創(chuàng)建PlayerController,命名為MyPlayerController 2.打開(kāi)MyPlayerController,勾選參數(shù)

    2024年02月10日
    瀏覽(317)
  • CSS 實(shí)現(xiàn)鼠標(biāo)移動(dòng)到圖片上圖片變大,不改變盒子大小

    CSS 實(shí)現(xiàn)鼠標(biāo)移動(dòng)到圖片上圖片變大,不改變盒子大小

    實(shí)現(xiàn)鼠標(biāo)經(jīng)過(guò)圖片時(shí),圖片等比放大,但是圖片的父盒子不會(huì)改變;主要使用了 css 的動(dòng)畫(huà)來(lái)實(shí)現(xiàn)。

    2024年02月05日
    瀏覽(102)
  • Vue實(shí)現(xiàn)鼠標(biāo)懸浮隱藏與顯示圖片效果 @mouseenter 和 @mouseleave事件

    Vue實(shí)現(xiàn)鼠標(biāo)懸浮隱藏與顯示圖片效果 @mouseenter 和 @mouseleave事件

    前端vue 有個(gè)功能是鼠標(biāo)移動(dòng)到指定item上顯示出來(lái)一個(gè)編輯和刪除的圖標(biāo) 鼠標(biāo)懸停在列表那么需要有懸浮顯示的列表編輯和刪除icon 文字不好描述,因?yàn)槭莣eb端錄屏也比較麻煩 這里用截圖說(shuō)明 之前沒(méi)做過(guò)這種效果,問(wèn)了一下我的組長(zhǎng)-豪哥 他告訴我很簡(jiǎn)單,利用vue的@mouseent

    2023年04月08日
    瀏覽(26)
  • QGraphicsView 如何實(shí)現(xiàn)百度地圖按照鼠標(biāo)點(diǎn)進(jìn)行放大縮小效果

    QGraphicsView 如何實(shí)現(xiàn)百度地圖按照鼠標(biāo)點(diǎn)進(jìn)行放大縮小效果

    前段時(shí)間用了QGraphicsView做了一些工作,然而如何實(shí)現(xiàn)QGraphicsView的放大縮小的效果也很簡(jiǎn)單,照鼠標(biāo)某一點(diǎn)進(jìn)行縮放,僅靠以下代碼對(duì)view進(jìn)行縮放會(huì)導(dǎo)致view上的item在放大縮小的過(guò)程中跑偏了。 我們看一下僅靠以上代碼實(shí)現(xiàn)的放大縮小的效果。 從下圖中我們看到把圖中小矩形

    2024年02月05日
    瀏覽(104)
  • 鼠標(biāo)事件以及 onmouseover, onmouseout 鼠標(biāo)移動(dòng)事件動(dòng)態(tài)渲染的注意點(diǎn)

    鼠標(biāo)事件以及 onmouseover, onmouseout 鼠標(biāo)移動(dòng)事件動(dòng)態(tài)渲染的注意點(diǎn)

    指的是鼠標(biāo)在進(jìn)入某個(gè)元素的時(shí)候觸發(fā)的事件 指的是鼠標(biāo)在離開(kāi)某個(gè)元素時(shí)觸發(fā)的事件 onclick-------------------------------------鼠標(biāo)單擊觸發(fā) ondblclick----------------------------------鼠標(biāo)雙擊觸發(fā) onmousemove---------------鼠標(biāo)在上面移動(dòng)時(shí)觸發(fā) 核心點(diǎn)以及坑點(diǎn).onmouseover, onmouseout 如果綁定在同

    2024年02月15日
    瀏覽(27)
  • vue 設(shè)置全局鼠標(biāo)移動(dòng)事件

    要設(shè)置全局鼠標(biāo)移動(dòng)事件,可以使用 Vue 的 mixin 實(shí)現(xiàn)。在 mixin 中,我們可以使用 $on 方法監(jiān)聽(tīng) mousemove 事件,并在組件銷(xiāo)毀時(shí)使用 $off 方法移除監(jiān)聽(tīng)器,以避免內(nèi)存泄漏。以下是一個(gè)例子: 這樣,每個(gè)組件都可以使用全局鼠標(biāo)移動(dòng)事件,而不需要在每個(gè)組件中單獨(dú)設(shè)置。

    2024年02月09日
    瀏覽(28)
  • JavaScript鼠標(biāo)移動(dòng)事件及案例

    JavaScript鼠標(biāo)移動(dòng)事件及案例

    一、鼠標(biāo)點(diǎn)擊事件 1.onclick單擊事件 ? ? ? ? 鼠標(biāo)單擊時(shí)事件處理函數(shù) input type=\\\"button\\\" id=\\\"bt\\\" value=\\\"點(diǎn)擊\\\" script //找到按鈕并設(shè)置點(diǎn)擊事件 ? ?document.getElementById(\\\"bt\\\").onclick ?= function (){ ? ? ? ? //被點(diǎn)擊后彈出彈出框 ? ? ? ?alert(\\\"按鈕被點(diǎn)擊\\\") ? ?} /script 2.ondblclick雙擊事件 ?鼠

    2023年04月08日
    瀏覽(19)
  • 【Unity功能】鼠標(biāo)移動(dòng)觸發(fā)事件方法

    【Unity功能】鼠標(biāo)移動(dòng)觸發(fā)事件方法

    ?方法一:方法觸發(fā) 注意:UGUI不能使用該方法 方法二:Event Trigger 注意:需要場(chǎng)景中包含EventSystem(在添加trigger組件后自動(dòng)添加);UGUI可以使用 方法三:

    2024年01月25日
    瀏覽(19)
  • Qt 鼠標(biāo)按下移動(dòng)釋放事件

    QEvent::MouseButtonPress ? 鼠標(biāo)按下時(shí),觸發(fā)該事件,它對(duì)應(yīng)的子類(lèi)是 QMouseEvent QEvent::MouseMove ? 鼠標(biāo)移動(dòng)時(shí),觸發(fā)該事件,它對(duì)應(yīng)的子類(lèi)是 QMouseEvent QEvent::MouseButtonRelease ? 鼠標(biāo)釋放時(shí),觸發(fā)該事件,它對(duì)應(yīng)的子類(lèi)是 QMouseEvent 自定義一個(gè)標(biāo)簽控件 LabelX ,讓它繼承自 QLabel ,然后

    2024年01月22日
    瀏覽(28)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包