博文链接: https://blog.csdn.net/zizle_lin/article/details/106164600
有个评论说在拖拽窗口会导致下拉框崩溃。也给出了例子https://ask.csdn.net/questions/1100233 我试着运行了该例子,只有一种情况会崩溃:在操作下拉框的同时拖拽窗口就会使程序崩溃。(如果有别的情况崩溃,望指出!) 个人觉得这类问题应该很少见,不至于在操作下拉框的时候还要拖拽窗口。但非要这么做,我想到个办法,重写QCombobox在操作下拉时禁用拖拽(试了禁止鼠标穿透,没成功.) 稍微修改了例子的代码如下:
# _*_ coding:utf-8 _*_ # @File : question.py # @Time : 2020-10-21 08:11 # @Author: zizle from PyQt5.Qt import * from PyQt5.QtCore import * class Combobox(QComboBox): enter = pyqtSignal() leave = pyqtSignal() def __init__(self, *args, **kwargs): super(Combobox, self).__init__(*args, **kwargs) def enterEvent(self, *args, **kwargs): self.enter.emit() def leaveEvent(self, *args, **kwargs): self.leave.emit() class AboutUsDialog(QDialog): def __init__(self, parent=None): super(AboutUsDialog, self).__init__(parent) self.is_drag = True self.setWindowFlags(Qt.FramelessWindowHint | Qt.Dialog) self.setGeometry(120, 0, 200, 120) self.co = Combobox(self) self.co.addItems(["test21","testf"]) self.co.enter.connect(self.mouse_enter_co) self.co.leave.connect(self.mouse_leave_co) def mouse_enter_co(self): self.is_drag = False def mouse_leave_co(self): self.is_drag = True def mousePressEvent(self, event): if self.is_drag and event.button() == Qt.LeftButton: self.dragPosition = event.globalPos() - self.frameGeometry().topLeft() QApplication.postEvent(self, QEvent(174)) event.accept() def mouseMoveEvent(self, event): if self.is_drag and event.buttons() == Qt.LeftButton: self.move(event.globalPos() - self.dragPosition) event.accept() if __name__ == '__main__': import sys app = QApplication(sys.argv) aboutus = AboutUsDialog() aboutus.show() sys.exit(app.exec_())如有其它错误和问题,望指出。