| 836 | } |
| 837 | |
| 838 | Py::Object PythonWrapper::fromQWidget(QWidget* widget, const char* className) |
| 839 | { |
| 840 | const char* typeName; |
| 841 | if (className) { |
| 842 | typeName = className; |
| 843 | } |
| 844 | else { |
| 845 | typeName = widget->metaObject()->className(); |
| 846 | } |
| 847 | #if defined(HAVE_SHIBOKEN) && defined(HAVE_PYSIDE) |
| 848 | // Access shiboken/PySide via C++ |
| 849 | auto type = getPyTypeObjectForTypeName<QWidget>(); |
| 850 | const char* wrapperName = typeName; |
| 851 | if (!type) { |
| 852 | // Some Shiboken builds do not resolve Qt widget classes via typeid().name(). |
| 853 | // Caller-provided class names and getWrapperName() use PySide type names instead. |
| 854 | type = getPyTypeObjectForPySideTypeName(wrapperName); |
| 855 | } |
| 856 | if (!type) { |
| 857 | wrapperName = getWrapperName(widget); |
| 858 | type = getPyTypeObjectForPySideTypeName(wrapperName); |
| 859 | } |
| 860 | if (type) { |
| 861 | PyObject* pyobj = Shiboken::Object::newObject(type, widget, false, false, wrapperName); |
| 862 | WrapperManager::instance().addQObject(widget, pyobj); |
| 863 | return Py::asObject(pyobj); |
| 864 | } |
| 865 | #else |
| 866 | // Access shiboken/PySide via Python |
| 867 | Py::Object obj = qt_wrapInstance<QWidget*>(widget, typeName, "QtWidgets"); |
| 868 | if (!obj.isNull()) { |
| 869 | return obj; |
| 870 | } |
| 871 | #endif |
| 872 | throw Py::RuntimeError("Failed to wrap widget"); |
| 873 | } |
| 874 | |
| 875 | const char* PythonWrapper::getWrapperName(QObject* obj) const |
| 876 | { |
no test coverage detected