Hi PySide users,

To answer my question, hoping this solution would help anyone encountering this issue.
The problem comes from C++ methods' signature featuring tabs. In our project's case, it was double tab[size] in several methods.
There is no proper ways to ask Shiboken to change the method's signature during the binding (i.e. by using some API-Extractor binding rules, like <modify-function> with <modify-argument> tags), as it seems to be a bug in Shiboken (not solved) : https://bugreports.qt-project.org/browse/PYSIDE-92?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel

In our case, the solution was to change the C++ methods' signature with pointors instead, which is acceptable in the native C++ code.

Feel free to react to this solution,
Nicolas.

On 11/18/2013 06:47 PM, Nicolas SAUBAT wrote:
Hello PySide users,

Working on a Qt/C++ based project : http://camitk.imag.fr, I'm looking for a way to bind this framework with Python, using PySide.
I've read the documentation and successfully used Shiboken to wrap the foo library provided in the tutorials.

Now, I've replaced the C++ foo-library of the PySide tutorials and when generating the wrapping, Shiboken outputs the following error :

Could not find a minimal constructor for type 'Array'. This will result in a compilation error.

The configuration of the library is made using CMake, copying the structure of the foo-library PySide tutorials.
Shiboken is called with the following arguments
  • the typesystem PATH
  • the include directories to look for the header files
  • pyside_global.h file (copied from /usr/include/PySide)
  • global.h (including all the C++ header files of the library to wrap)
  • the input system file : typesystem_camitk.xml with the following content :


<?xml version="1.0"?>
<typesystem package="camitk_package">
    <!--     Basic system types, which I know are needed -->
    <load-typesystem name="typesystem_core.xml" generate="no" />
    <load-typesystem name="typesystem_gui.xml" generate="no" />       
   
    <!--     Optional system types, that might be necessary for more complex projects -->
    <!--<load-typesystem name="typesystem_core_common.xml" generate="no" />
    <load-typesystem name="typesystem_core_x11.xml" generate="no" />
    <load-typesystem name="typesystem_core_maemo.xml" generate="no" />
    <load-typesystem name="typesystem_gui_common.xml" generate="no" />
    <load-typesystem name="typesystem_gui_simulator.xml" generate="no" />
    <load-typesystem name="typesystem_templates.xml" generate="no" />
    <load-typesystem name="typesystem_declarative.xml" generate="no" />
    <load-typesystem name="typesystem_uitools.xml" generate="no" />
    <load-typesystem name="typesystem_help.xml" generate="no" />
    <load-typesystem name="typesystem_test.xml" generate="no" />
    <load-typesystem name="typesystem_network.xml" generate="no" />
    <load-typesystem name="typesystem_phonon.xml" generate="no" />
    <load-typesystem name="typesystem_script.xml" generate="no" />
    <load-typesystem name="typesystem_scripttools.xml" generate="no" />
    <load-typesystem name="typesystem_xml.xml" generate="no" />
    <load-typesystem name="typesystem_xmlpatterns.xml" generate="no" />
    <load-typesystem name="typesystem_opengl.xml" generate="no" />
    <load-typesystem name="typesystem_uitools.xml" generate="no" />
    <load-typesystem name="typesystem_webkit.xml" generate="no" />
    <load-typesystem name="typesystem_webkit_simulator.xml" generate="no" />-->

    <namespace-type name="camitk" />
    <object-type name="camitk::ActionWidget" />
    <object-type name="camitk::HistoryItem" />
    <object-type name="camitk::RendererWidget" />
    <object-type name="camitk::InteractiveViewer" />
    <object-type name="camitk::Explorer" />
    <object-type name="camitk::PropertyExplorer" />
    <object-type name="camitk::MedicalImageViewer" />
    <object-type name="camitk::Viewer" />
    <object-type name="camitk::ActionViewer" />
    <object-type name="camitk::MeshComponentExtension" />
    <object-type name="camitk::MeshComponent" />
    <object-type name="camitk::Slice" />
    <object-type name="camitk::ComponentExtension" />
    <object-type name="camitk::ComponentPopupMenu" />
    <object-type name="camitk::Component" />
    <object-type name="camitk::Geometry" />
    <object-type name="camitk::GeometricObject" />
    <object-type name="camitk::SingleImageComponent" />
    <object-type name="camitk::MedicalDataOriginDialog" />
    <object-type name="camitk::ImageComponent" />
    <object-type name="camitk::ImageComponentExtension" />
    <object-type name="camitk::HistoryComponent" />
    <object-type name="camitk::Core" />
    <object-type name="camitk::ObjectController" />
    <object-type name="camitk::Log" />
    <object-type name="camitk::PlaneC" />
    <object-type name="camitk::SliderSpinBoxWidget" />
    <object-type name="camitk::SliderTextWidget" />
    <object-type name="camitk::ActionExtension" />
    <object-type name="camitk::Action" />
    <object-type name="camitk::ExtensionManager" />
    <object-type name="camitk::Application" />
    <object-type name="camitk::SettingsDialog" />
    <object-type name="camitk::MainWindow" />

</typesystem>
 
I've been trying to include several typesystems (the ones commented 'optional'), but this did not solve the problem.
I'm running a Debian Wheezy (stable) Linux distribution using Shiboken 1.1.1. I've also tested the 1.1.8 and 1.2.1 version of Shiboken (with a Kubuntu 13.10 distribution), but the issue remains.

I've found some people on the net, also encountering this problem, but with no solution on how to solve it. This is why I'm turning to your binding's wisdom !
As I'm absolutely not mastering the Shiboken tool, I could have made a mistake and if someone has an idea, he / she is more than welcome !

Thanks a lot,
Nicolas S.

-- 
Nicolas SAUBAT
Ingénieur Recherche et Développement
Equipe GMCAO - Laboratoire TIMC-IMAG
Pavillon Taillefer
Allée des Alpes - Domaine de la Merci
38706 La Tronche
Tel : (33)04 56 52 00 10


_______________________________________________
PySide mailing list
[email protected]
http://lists.qt-project.org/mailman/listinfo/pyside

-- 
Nicolas SAUBAT
Ingénieur Recherche et Développement
Equipe GMCAO - Laboratoire TIMC-IMAG
Pavillon Taillefer
Allée des Alpes - Domaine de la Merci
38706 La Tronche
Tel : (33)04 56 52 00 10

_______________________________________________
PySide mailing list
[email protected]
http://lists.qt-project.org/mailman/listinfo/pyside

Reply via email to