Пример #1
0
    def eventFilter(self, obj, event):
        if obj == self.tabBar():
            if event.type() == QEvent.MouseButtonPress and event.buttons(
            ) == Qt.LeftButton:
                # can start tab drag only if mouse is at some tab, not at empty tabbar space
                if self.tabBar().tabAt(event.pos()) >= 0:
                    self.tabDragCanStart = True
                else:
                    self.dragCanStart = True

            elif event.type() == QEvent.MouseButtonRelease:
                self.tabDragCanStart = False
                self.dragCanStart = False
                self.manager.updateDragPosition()

            elif event.type() == QEvent.MouseMove:
                self.manager.updateDragPosition()
                if self.tabDragCanStart:
                    if self.tabBar().rect().contains(event.pos()):
                        return False
                    if event.buttons() != Qt.LeftButton:
                        return False
                    toolWindow = self.currentWidget()
                    if not (toolWindow
                            and self.manager.hasToolWindow(toolWindow)):
                        return False
                    self.tabDragCanStart = False
                    #stop internal tab drag in QTabBar
                    releaseEvent = QtGui.QMouseEvent(QEvent.MouseButtonRelease,
                                                     event.pos(),
                                                     Qt.LeftButton,
                                                     Qt.LeftButton,
                                                     Qt.NoModifier)
                    QApplication.sendEvent(self.tabBar(), releaseEvent)
                    self.manager.startDrag([toolWindow])

                elif self.dragCanStart:
                    self.check_mouse_move(event)

        return QTabWidget.eventFilter(self, obj, event)