def textWidth(self, column): text = self.text(column) font = self.font(column) metrics = QtGui.QFontMetricsF(font) textWidth = metrics.width(text) return textWidth
def paintBackground(self, painter, option, index): """ Draw the background for the item. :type painter: QtWidgets.QPainter :type option: QtWidgets.QStyleOptionViewItem :type index: QtCore.QModelIndex :rtype: None """ super(GroupItem, self).paintBackground(painter, option, index) painter.setPen(QtGui.QPen(QtCore.Qt.NoPen)) visualRect = self.visualRect(option) text = self.name() metrics = QtGui.QFontMetricsF(self._font) textWidth = metrics.width(text) padding = (25 * self.dpi()) visualRect.setX(textWidth + padding) visualRect.setY(visualRect.y() + (visualRect.height() / 2)) visualRect.setHeight(2 * self.dpi()) visualRect.setWidth(visualRect.width() - padding) color = QtGui.QColor( self.textColor().red(), self.textColor().green(), self.textColor().blue(), 10 ) painter.setBrush(QtGui.QBrush(color)) painter.drawRect(visualRect)
def textRect(self): """ Return the bounding box rect for the text. :rtype: QtCore.QRect """ text = self.text() font = self.font() metrics = QtGui.QFontMetricsF(font) return metrics.boundingRect(text)
def _paintText(self, painter, option, column): if self.itemsWidget().isIconView(): text = self.name() else: label = self.labelFromColumn(column) text = self.displayText(label) isSelected = option.state & QtWidgets.QStyle.State_Selected if isSelected: color = self.textSelectedColor() else: color = self.textColor() visualRect = self.visualRect(option) width = visualRect.width() height = visualRect.height() padding = self.padding() x = padding / 2 y = padding / 2 visualRect.translate(x, y) visualRect.setWidth(width - padding) visualRect.setHeight(height - padding) font = self.font(column) align = self.textAlignment(column) metrics = QtGui.QFontMetricsF(font) if text: textWidth = metrics.width(text) else: textWidth = 1 # # Check if the current text fits within the rect. if textWidth > visualRect.width() - padding: visualWidth = visualRect.width() text = metrics.elidedText(text, QtCore.Qt.ElideRight, visualWidth) align = QtCore.Qt.AlignLeft if self.itemsWidget().isIconView(): align = align | QtCore.Qt.AlignBottom else: align = align | QtCore.Qt.AlignVCenter pen = QtGui.QPen(color) painter.setPen(pen) painter.setFont(font) painter.drawText(visualRect, align, text)
def resizeColumnToContents(self, column): """ Resize the given column to the data of that column. :type column: int or text :rtype: None """ width = 0 for item in self.items(): text = item.text(column) font = item.font(column) metrics = QtGui.QFontMetricsF(font) textWidth = metrics.width(text) + item.padding() width = max(width, textWidth) self.setColumnWidth(column, width)
def _paintText(self, painter, option, column): if self.itemsWidget().isIconView(): text = self.name() else: label = self.labelFromColumn(column) text = self.displayText(label) isSelected = option.state & QtWidgets.QStyle.State_Selected if isSelected: color = self.textSelectedColor() else: color = self.textColor() visualRect = self.visualRect(option) width = visualRect.width() height = visualRect.height() padding = self.padding() x = padding / 2 y = padding / 2 visualRect.translate(x, y) visualRect.setWidth(width - padding) visualRect.setHeight(height - padding) font = self.font(column) align = self.textAlignment(column) metrics = QtGui.QFontMetricsF(font) if text: textWidth = metrics.width(text) else: textWidth = 1 # # Check if the current text fits within the rect. if textWidth > visualRect.width() - padding: visualWidth = visualRect.width() text = metrics.elidedText(text, QtCore.Qt.ElideRight, visualWidth) align = QtCore.Qt.AlignLeft align = align | QtCore.Qt.AlignVCenter rect = QtCore.QRect(visualRect) if self.itemsWidget().isIconView(): if self.isLabelOverItem() or self.isLabelUnderItem(): padding = 8 if padding < 8 else padding height = metrics.height() + (padding / 2) y = (rect.y() + rect.height()) - height rect.setY(y) rect.setHeight(height) if self.isLabelOverItem(): color2 = self.itemsWidget().backgroundColor().toRgb() color2.setAlpha(200) painter.setPen(QtCore.Qt.NoPen) painter.setBrush(QtGui.QBrush(color2)) painter.drawRect(rect) pen = QtGui.QPen(color) painter.setPen(pen) painter.setFont(font) painter.drawText(rect, align, text)