如何在QT Designer中覆盖QScrollArea上的wheelEvent

时间:2014-07-05 22:03:30

标签: python pyqt

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

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)))

0 个答案:

没有答案