def paintEvent(self, theEvent): """Custom implementation of the label painter that rotates the label 90 degrees. """ pObj = QStylePainter(self) oObj = QStyleOptionTab() for i in range(self.count()): self.initStyleOption(oObj, i) pObj.drawControl(QStyle.CE_TabBarTabShape, oObj) pObj.save() oSize = oObj.rect.size() oSize.transpose() oRect = QRect(QPoint(), oSize) oRect.moveCenter(oObj.rect.center()) oObj.rect = oRect oCenter = self.tabRect(i).center() pObj.translate(oCenter) pObj.rotate(90) pObj.translate(-oCenter) pObj.drawControl(QStyle.CE_TabBarTabLabel, oObj) pObj.restore() return
def __getStyleOption(self, row, col): tab = self.__tabAt(row, col) if not tab: return None opt = QStyleOptionTab() opt.initFrom(self) opt.state &= ~(QStyle.State_HasFocus | QStyle.State_MouseOver) opt.rect = self.tabRect(row, col) isCurrent = (row, col) == self.__selectedIndex opt.row = 0 if (row, col) == self.__pressedIndex: opt.state |= QStyle.State_Sunken if isCurrent: opt.state |= QStyle.State_Selected if isCurrent and self.hasFocus(): opt.state |= QStyle.State_HasFocus if not tab.enabled: opt.state &= ~QStyle.State_Enabled if self.isActiveWindow(): opt.state |= QStyle.State_Active if opt.rect == self.__hoverRect: opt.state |= QStyle.State_MouseOver opt.shape = QTabBar.RoundedNorth opt.text = tab.text if tab.textColor.isValid(): opt.palette.setColor(self.foregroundRole(), tab.textColor) opt.icon = tab.icon opt.iconSize = self.iconSize() if row == self.__selectedIndex[0]: if col > 0 and col - 1 == self.__selectedIndex[1]: opt.selectedPosition = QStyleOptionTab.PreviousIsSelected elif col < self.numTabsInRow(row) - 1 and \ col + 1 == self.__selectedIndex[1]: opt.selectedPosition = QStyleOptionTab.NextIsSelected else: opt.selectedPosition = QStyleOptionTab.NotAdjacent else: opt.selectedPosition = QStyleOptionTab.NotAdjacent if col == 0: if self.numTabsInRow(row) > 1: opt.position = QStyleOptionTab.Beginning else: opt.position = QStyleOptionTab.OnlyOneTab elif col == self.numTabsInRow(row) - 1: opt.position = QStyleOptionTab.End else: opt.position = QStyleOptionTab.Middle return opt
def paintEvent(self, event): painter = QStylePainter(self) opt = QStyleOptionTab() for i in range(self.count()): self.initStyleOption(opt, i) painter.drawControl(QStyle.CE_TabBarTabShape, opt) painter.save() s = opt.rect.size() s.transpose() r = QRect(QPoint(), s) r.moveCenter(opt.rect.center()) opt.rect = r c = self.tabRect(i).center() painter.translate(c) painter.rotate(270) painter.translate(-c) painter.drawControl(QStyle.CE_TabBarTabLabel, opt) painter.restore()