def _setup_ui(self): self.setRenderHint(QPainter.Antialiasing) self.setTransformationAnchor(QGraphicsView.AnchorUnderMouse) self.setResizeAnchor(QGraphicsView.AnchorUnderMouse) self.setFrameShape(QFrame.NoFrame) self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self._loading_map = self._generate_loading_map() self._scene = QGraphicsScene(self) self._scene.setBackgroundBrush(QBrush(self.palette().dark().color())) self._image = QGraphicsPixmapItem() self._scene.addItem(self._image) # hud hud_color = self.palette().highlight().color().lighter(150) self._overlay = self._scene.addEllipse(QRectF(), QPen(hud_color, 4), QBrush(Qt.NoBrush)) self._crosshair = self._scene.addEllipse(QRectF(), QPen(hud_color, 2), QBrush(Qt.NoBrush)) rect = QRectF(0, 0, self._w, self._h) cx = rect.center().x() cy = rect.center().y() r = min(rect.width(), rect.height()) * 0.7 self._overlay.setRect(QRectF(cx - r / 2, cy - r / 2, r, r)) rc = min(rect.width(), rect.height()) * 0.05 self._crosshair.setRect(QRectF(cx - rc / 2, cy - rc / 2, rc, rc)) self._overlay.setVisible(False) self._crosshair.setVisible(False) # scene self.setScene(self._scene) self._info = CameraInspectorInfo() self.setLayout(self._info)
def createPixmapForSite(self, icon, title, url): ''' @param: icon QIcon @param: title QString @param: url QString @return: QPixmap ''' fontMetrics = QApplication.fontMetrics() padding = 4 text = len(title) > len(url) and title or url maxWidth = fontMetrics.width(text) + 3 * padding + 16 width = min(maxWidth, 150) height = fontMetrics.height() * 2 + fontMetrics.leading() + 2 * padding pixelRatio = gVar.app.devicePixelRatio() pixmap = QPixmap(width * pixelRatio, height * pixelRatio) pixmap.setDevicePixelRatio(pixelRatio) painter = QPainter(pixmap) painter.setRenderHint(QPainter.Antialiasing) # Draw background pen = QPen(Qt.black) pen.setWidth(1) painter.setPen(pen) path = QPainterPath() path.addRect(QRectF(0, 0, width, height)) painter.fillPath(path, Qt.white) painter.drawPath(path) # Draw icon iconRect = QRect(padding, 0, 16, height) icon.paint(painter, iconRect) # Draw title titleRect = QRectF(iconRect.right() + padding, padding, width - padding - iconRect.right(), fontMetrics.height()) painter.drawText(titleRect, fontMetrics.elidedText(title, Qt.ElideRight, titleRect.width())) # Draw url urlRect = QRectF(titleRect.x(), titleRect.bottom() + fontMetrics.leading(), titleRect.width(), titleRect.height()) painter.setPen(QApplication.palette().color(QPalette.Link)) painter.drawText(urlRect, fontMetrics.elidedText(url, Qt.ElideRight, urlRect.width())) return pixmap