J'ai un problème avec la gestion de Signal() dans QT 5.12 avec QVariantMap.

Mon exemple fonctionne bien dans QT 5.15 et Python 3.8, mais il doit être compatible avec QT 5.12 et Python 3.7.

Le signal semble être correctement émis par Python mais ma fonction de journal n'est pas appelée.

Y a-t-il des changements entre ces versions avec la gestion de QVariantMap ?

J'ai joint les lignes importantes et un lien pour compléter l'échantillon.

class WeatherWrapper(QObject):

dataChanged = Signal()

@Property("QVariantMap", notify=dataChanged)
    def data(self) -> dict:
        return self._data
  self.dataChanged.emit()
Connections {
        target: weather
        function onDataChanged() {
        console.log("recevied dataChanged signal")
        }

        }

Échantillon complet : https://github.com/lutzh86/qmlweathertest/

1
Lutz Ha 1 nov. 2020 à 15:02

1 réponse

Meilleure réponse

Ce n'est pas un problème avec QVariantMap. Pour une raison quelconque, Qt a décidé de changer la syntaxe de l'objet Connections. En 5.12, vous devez procéder comme ceci :

Connections {
    target: weather
    onDataChanged: {
        console.log("received dataChanged signal")
    }
}

Si vous faites cela sur 5.15, vous recevrez des avertissements d'exécution ennuyeux indiquant que la syntaxe est obsolète mais qu'elle fonctionnera toujours.

0
JarMan 1 nov. 2020 à 14:33