如何在QT设计中重写QScrollArea上的wheelEvent

2024-09-24 22:31:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个用QT设计器设计的主窗口。除此之外,它还有一个滚动区域,上面有一个用来显示图像的标签。我想用我自己的缩放图像的鼠标滚轮处理程序替换默认的鼠标滚轮处理程序。如果我将wheelEvent事件添加到从编译的qt设计器文件继承主窗口类的类(Ui_MainWindow),则无论鼠标指针在哪里,哪个小部件处于活动状态,它都会缩放图像。更重要的是,在处理我自己的缩放处理程序之前,滚动区域一直在处理wheel事件。我不太确定如何替换标准wheelevent事件处理程序,使缩放仅在scrollarea处于活动状态时工作?如果我自己编写GUI代码,我知道如何做到这一点,但是使用QT Designer,我不应该接触GUI的编译版本。 下面是处理缩放的代码段。但是如果没有QT设计器编译的代码,它将无法工作。。。在

from MainWindow import Ui_MainWindow

if __name__ == "__main__":
    class CCDInspectorMainWindow(QMainWindow, Ui_MainWindow):
        ImageWidth=0
        ImageHeight=0            
        zoom=1.0

        def __init__(self, parent = None):
            super(CCDInspectorMainWindow, self).__init__(parent)
            self.setupUi(self)
            QObject.connect(self.actionOpen_File, SIGNAL("triggered()"), self.openDialog)
            self.imageMap=QImage(0,0,QImage.Format_RGB888)


        def openDialog(self):
            fileObj=QFileDialog.getOpenFileName(self,"Open image", filter="All Image Files (*.png *.xpm *.jpg *.tif *.fit *.fits *.cr*)")
            self.imageMap=QImage(fileObj)
            self.ImageWidth=self.imageMap.width()
            self.ImageHeight=self.imageMap.height()
            self.updateImages()

        def wheelEvent(self,event):
            self.zoom = self.zoom+event.delta() / 1200.0
            if self.zoom<0:
                self.zoom=0
            self.updateImages()

        def updateImages(self):
            self.setOriginalImage()
            self.setSplitImage()

        def setOriginalImage(self):
            self.OriginalImage.setPixmap(QPixmap.fromImage(self.imageMap.scaled(int(self.ImageWidth*self.zoom),int(self.ImageHeight*self.zoom),aspectRatioMode=Qt.IgnoreAspectRatio, transformMode=Qt.FastTransformation)))

Tags: 图像self处理程序uidef事件鼠标qt