def paintEvent(self, event): if self._inited: self._display.Context.UpdateCurrentViewer() # important to allow overpainting of the OCC OpenGL context in Qt self.swapBuffers() if self._drawbox: self.makeCurrent() painter = QtGui.QPainter(self) painter.setPen(QtGui.QPen(QtGui.QColor(0, 0, 0), 1)) rect = QtCore.QRect(*self._drawbox) painter.drawRect(rect) painter.end() self.doneCurrent()
def startDrag(self, actions): """ Reimplemented to start the drag of a tree widget item. """ nid = self.currentItem() if nid is None: return self._dragging = nid _, node, obj = self._controller._get_node_data(nid) # Convert the item being dragged to MIME data. drag_object = node.get_drag_object(obj) md = PyMimeData.coerce(drag_object) # Render the item being dragged as a pixmap. nid_rect = self.visualItemRect(nid) rect = nid_rect.intersected(self.viewport().rect()) pm = QtGui.QPixmap(rect.size()) pm.fill(self.palette().base().color()) painter = QtGui.QPainter(pm) option = self.viewOptions() option.state |= QtWidgets.QStyle.State_Selected option.rect = QtCore.QRect(nid_rect.topLeft() - rect.topLeft(), nid_rect.size()) self.itemDelegate().paint(painter, option, self.indexFromItem(nid)) painter.end() # Calculate the hotspot so that the pixmap appears on top of the # original item. hspos = self.viewport().mapFromGlobal(QtGui.QCursor.pos()) - \ nid_rect.topLeft() # Start the drag. drag = QtGui.QDrag(self) drag.setMimeData(md) drag.setPixmap(pm) drag.setHotSpot(hspos) drag.exec_(actions)