def from_string(self, text, original_value): if isinstance(original_value, QColor): match = self.color_exp.match(text) return QColor(min(int(match.captured(1)), 255), min(int(match.captured(2)), 255), min(int(match.captured(3)), 255), min(int(match.captured(4)), 255)) if isinstance(original_value, QDate): value = QDate.fromString(text, Qt.ISODate) return value if value.isValid() else None if isinstance(original_value, QDateTime): value = QDateTime.fromString(text, Qt.ISODate) return value if value.isValid() else None if isinstance(original_value, QTime): value = QTime.fromString(text, Qt.ISODate) return value if value.isValid() else None if isinstance(original_value, QPoint): match = self.point_exp.match(text) return QPoint(int(match.captured(1)), int(match.captured(2))) if isinstance(original_value, QRect): match = self.rect_exp.match(text) return QRect(int(match.captured(1)), int(match.captured(2)), int(match.captured(3)), int(match.captured(4))) if isinstance(original_value, QSize): match = self.size_exp.match(text) return QSize(int(match.captured(1)), int(match.captured(2))) if isinstance(original_value, list): return text.split(',') return type(original_value)(text)
def parseQRdata(self, qr_data): self.QR_data = qr_data logging.info(self.tr("QR: " + self.QR_data)) params = parse_qs(self.QR_data) try: for timestamp_pattern in self.timestamp_patterns: datetime = QDateTime.fromString(params['t'][0], timestamp_pattern) datetime.setTimeSpec(Qt.UTC) if datetime.isValid(): self.SlipTimstamp.setDateTime(datetime) self.SlipAmount.setText(params['s'][0]) self.FN.setText(params['fn'][0]) self.FD.setText(params['i'][0]) self.FP.setText(params['fp'][0]) self.SlipType.setCurrentIndex(int(params['n'][0]) - 1) except KeyError: logging.warning(self.tr("QR available but pattern isn't recognized: " + self.QR_data)) return self.qr_data_validated.emit()