Gui: Fix wildcard call disconnects warnings Qt6.9 (#22096)

* Gui: Fix wildcard call disconnects warnings Qt6.9

* Gui: Fix typo

---------

Co-authored-by: Benjamin Nauck <benjamin@nauck.se>
This commit is contained in:
Kacper Donat
2025-06-23 19:42:03 +02:00
committed by GitHub
parent ab6e3d18dd
commit c9532316ff

View File

@@ -392,34 +392,39 @@ public:
*/
void addQObject(QObject* obj, PyObject* pyobj)
{
const auto PyW_unique_name = QString::number(reinterpret_cast <quintptr> (pyobj));
auto PyW_invalidator = findChild <QObject *> (PyW_unique_name, Qt::FindDirectChildrenOnly);
// static array to contain created connections so they can be safely disconnected later
static std::map<QObject*, QMetaObject::Connection> connections = {};
const auto PyW_uniqueName = QString::number(reinterpret_cast<quintptr>(pyobj));
auto PyW_invalidator = findChild<QObject*>(PyW_uniqueName, Qt::FindDirectChildrenOnly);
if (PyW_invalidator == nullptr) {
PyW_invalidator = new QObject(this);
PyW_invalidator->setObjectName(PyW_unique_name);
PyW_invalidator->setObjectName(PyW_uniqueName);
Py_INCREF (pyobj);
}
else {
PyW_invalidator->disconnect();
else if (connections.contains(PyW_invalidator)) {
disconnect(connections[PyW_invalidator]);
connections.erase(PyW_invalidator);
}
auto destroyedFun = [pyobj](){
auto destroyedFun = [pyobj]() {
Base::PyGILStateLocker lock;
auto sbk_ptr = reinterpret_cast <SbkObject *> (pyobj);
if (sbk_ptr != nullptr) {
Shiboken::Object::setValidCpp(sbk_ptr, false);
if (auto sbkPtr = reinterpret_cast<SbkObject*>(pyobj); sbkPtr != nullptr) {
Shiboken::Object::setValidCpp(sbkPtr, false);
}
else {
Base::Console().developerError("WrapperManager", "A QObject has just been destroyed after its Pythonic wrapper.\n");
}
Py_DECREF (pyobj);
};
QObject::connect(PyW_invalidator, &QObject::destroyed, this, destroyedFun);
QObject::connect(obj, &QObject::destroyed, PyW_invalidator, &QObject::deleteLater);
}
connections[PyW_invalidator] = connect(PyW_invalidator, &QObject::destroyed, this, destroyedFun);
connect(obj, &QObject::destroyed, PyW_invalidator, &QObject::deleteLater);
}
private:
void wrapQApplication()