今天的软件体系结构课程的时间主要是留给软件杯选题第三阶段的开发。目前初步实现了以前一直想实现的画面点击交互。Qt5中自带的QLabel无法实现此功能,因而自己重写了一个带相应信号方法的组件 ClickableQLabel 。同时,学习了Qt5基本的信号机制相关知识(一开始由于不知道这些对于怎么实现有点百思不得其解 )。
以下付上该组件代码,其中 mousePressEvent 和 mouseReleaseEvent 都是返回鼠标相对Label左上角的坐标。
1 from PyQt5.QtWidgets import QLabel 2 from PyQt5 import QtCore 3 4 class ClickableQLabel(QLabel): 5 """ 6 ClickableQLabel Type 1 7 """ 8 mousePressSignal = QtCore.pyqtSignal(int,int) 9 mouseReleaseSignal = QtCore.pyqtSignal(int,int) 10 11 def __init__(self, parent=None): 12 super().__init__(parent) 13 14 def mousePressEvent(self, ev): 15 if ev.buttons() & QtCore.Qt.LeftButton: 16 self.mousePressSignal.emit(ev.x(),ev.y()) 17 #return ev.x(),ev.y() 18 else: 19 self.mousePressSignal.emit(-1,-1) 20 #return -1,-1 21 22 def mouseReleaseEvent(self, ev): 23 self.mouseReleaseSignal.emit(ev.x(),ev.y()) 24 #return ev.x(),ev.y()