// Return the QMetaObject for a type. static const QMetaObject *get_qmetaobject(pyqtWrapperType *pyqt_wt) { // See if it's a sub-type of a wrapped type. if (pyqt_wt->metaobject) return QPYCORE_QMETAOBJECT(pyqt_wt->metaobject); // It's a wrapped type. const pyqt4ClassPluginDef *cpd = reinterpret_cast<const pyqt4ClassPluginDef *>(sipTypePluginData(((sipWrapperType *)pyqt_wt)->wt_td)); return reinterpret_cast<const QMetaObject *>(cpd->static_metaobject); }
// The type init slot. static int pyqtWrapperType_init(pyqtWrapperType *self, PyObject *args, PyObject *kwds) { // Let the super-type complete the basic initialisation. if (sipWrapperType_Type->tp_init((PyObject *)self, args, kwds) < 0) return -1; const pyqt4ClassPluginDef *pyqt_td = reinterpret_cast<const pyqt4ClassPluginDef *>(sipTypePluginData(((sipWrapperType *)self)->wt_td)); if (pyqt_td && !sipIsExactWrappedType((sipWrapperType *)self)) { // Create a dynamic meta-object as its base wrapped type has a static // Qt meta-object. if (pyqt_td->static_metaobject && create_dynamic_metaobject(self) < 0) return -1; } return 0; }
// Handle the getting of a lazy attribute, ie. a native Qt signal. int qpycore_get_lazy_attr(const sipTypeDef *td, PyObject *dict) { const pyqt5QtSignal *sigs = reinterpret_cast<const pyqt5ClassPluginDef *>( sipTypePluginData(td))->qt_signals; // Handle the trvial case. if (!sigs) return 0; QByteArray default_name; qpycore_pyqtSignal *default_signal = 0; do { // See if we have come to the end of the current signal. if (default_signal && !is_signal_name(sigs->signature, default_name)) { if (PyDict_SetItemString(dict, default_name.constData(), (PyObject *)default_signal) < 0) return -1; default_signal = 0; } bool fatal; qpycore_pyqtSignal *sig = qpycore_pyqtSignal_New(sigs->signature, &fatal); if (!sig) { if (fatal) return -1; PyErr_Clear(); continue; } sig->docstring = sigs->docstring; sig->emitter = sigs->emitter; // See if this is a new default. if (default_signal) { sig->default_signal = default_signal; append_overload(sig); } else { sig->non_signals = sigs->non_signals; default_signal = sig->default_signal = sig; default_name = sigs->signature; default_name.truncate(default_name.indexOf('(')); } } while ((++sigs)->signature); // Save the last one, if any (in case of a non-fatal error). if (!default_signal) return 0; return PyDict_SetItemString(dict, default_name.constData(), (PyObject *)default_signal); }