class TableWidget(QTableWidget): cellExited = pyqtSignal(int, int) itemExited = pyqtSignal(QTableWidgetItem) released = pyqtSignal(QMouseEvent) def __init__(self, rows, columns, parent=None): QTableWidget.__init__(self, rows, columns, parent) self._last_index = QPersistentModelIndex() self.viewport().installEventFilter(self) def mouseReleaseEvent(self, event: QMouseEvent): event.accept() if event.button() == 1: self.released.emit(event) def eventFilter(self, widget, event): if widget is self.viewport(): index = self._last_index if event.type() == QEvent.MouseMove: index = self.indexAt(event.pos()) elif event.type() == QEvent.Leave: index = QModelIndex() if index != self._last_index: row = self._last_index.row() column = self._last_index.column() item = self.item(row, column) if item is not None: self.itemExited.emit(item) self.cellExited.emit(row, column) self._last_index = QPersistentModelIndex(index) return QTableWidget.eventFilter(self, widget, event)
def fillTable(self, init=False): try: if self.crs is None or self.crsLay is None: return if self.isHidden() and not init: return if self.debug: self.info.log("fillTable", "debug", self.debug) self.blockItemChange = True self.tblCoords.clear() self.tblCoords.setColumnCount(5) self.tblCoords.setHorizontalHeaderItem(0, QTableWidgetItem("X")) self.tblCoords.setHorizontalHeaderItem(1, QTableWidgetItem("Y")) self.tblCoords.setHorizontalHeaderItem(2, QTableWidgetItem("")) self.tblCoords.setHorizontalHeaderItem(3, QTableWidgetItem("Xr")) self.tblCoords.setHorizontalHeaderItem(4, QTableWidgetItem("Yr")) self.tblCoords.horizontalHeader().setSectionHidden(3, self.debug) # self.tblCoords.setColumnHidden(3, self.debug) self.tblCoords.setColumnHidden(4, self.debug) self.tblCoords.horizontalHeader().setSectionResizeMode( QHeaderView.Stretch) self.tblCoords.horizontalHeader().setSectionResizeMode( 2, QHeaderView.ResizeToContents) # QHeaderView.Fixed destCrs = self.crs self.canvas.refresh() if self.cboFeat.currentData(): feat = self.layer.getFeature(self.cboFeat.currentData()) geometry = feat.geometry() tr = QgsCoordinateTransform(self.crsLay, destCrs, self.prj) row = 0 column = 2 # btn column for v in geometry.vertices(): self.tblCoords.setRowCount(row + 1) if self.debug: self.info.log("vertex:", v.x(), v.y()) v.transform(tr) itemX = QTableWidgetItem(str(v.x())) self.tblCoords.setItem(row, 0, itemX) itemY = QTableWidgetItem(str(v.y())) self.tblCoords.setItem(row, 1, itemY) itemXr = QTableWidgetItem(str(v.x())) self.tblCoords.setItem(row, 3, itemXr) itemYr = QTableWidgetItem(str(v.y())) self.tblCoords.setItem(row, 4, itemYr) index = QPersistentModelIndex(self.tblCoords.model().index( row, column)) btn = MyButton(self.gtomain) btn.setIcon(self.icon) btn.click.connect(lambda *args, index=index: self. cellClick(index.row(), index.column())) btn.setEnabled(False) btn.setPixmap(self.icon.pixmap(24, 24)) self.tblCoords.setCellWidget(row, 2, btn) row = row + 1 if self.debug: self.info.log("vertex transformed:", v.x(), v.y()) self.reset() if geometry.type( ) == QgsWkbTypes.GeometryType.PolygonGeometry: # remove double vertex???? self.tblCoords.removeRow(self.tblCoords.rowCount() - 1) if self.isVisible(): self.setRubber() self.markedFeature = self.helper.markFeature( self.layer, feat) self.btnZoomTo.setEnabled(True) self.blockItemChange = False self.tblCoords.setCurrentCell(0, 0) else: self.reset() self.blockItemChange = False except Exception as e: self.info.err(e)