[PyQt] SIP multiple inheritance with template base class
Giuseppe Corbelli
corbelligiuseppe at mesdan.it
Mon Apr 9 10:11:40 BST 2018
On 04/05/2018 06:23 PM, Phil Thompson wrote:
>>> Please provide a short, complete example that demonstrates the problem.
>>
>> git clone https://github.com/cowo78/QCustomPlot-PyQt5
>> cd QCustomPlot-PyQt5/
>> git checkout v2.0.0
>> git submodule update --init QCustomPlot
>> echo "" > helper.h
>> python3 setup.py build
>
> Not exactly what I had in mind as a short, complete example...
I understand, but the error is located in a single point, not related to
anything else, and the hierarchy is fairly complex and not easily cut.
>> Compilation will fail because of a missing typedef.
>> The relevant pieces are:
>> * template class QCPAbstractPlottable1D in plottable1d.sip
>> * typedef QCPAbstractPlottable1D<QCPBarsData> in plottable-bars.sip
>
> It fails before that...
>
> In file included from build/temp.macosx-10.9-x86_64-3.7/sipQCustomPlotcmodule.cpp:15:
> build/temp.macosx-10.9-x86_64-3.7/sipAPIQCustomPlot.h:20:10: fatal error:
> 'QMetaType' file not found
> #include <QMetaType>
>
> However, you have specified the typedef in the %TypeHeaderCode in plottable-bars.sip. If you want the typedef to be visible to the rest of the generated code then put it in %ModuleHeaderCode instead.
Well, my platform is not OSX but the directive seems fine and it is not
end user code but was generated by sip.
I don't want the typedefs to be global, that is not the point.
Given the class:
template <DataType>
class QCPAbstractPlottable1D :
public QCPAbstractPlottable, public QCPPlottableInterface1D /Abstract/
{
%TypeHeaderCode
#include <QCustomPlot/src/qcp.h>
typedef QCPAbstractPlottable1D<QCPGraphData>
QCPAbstractPlottable1D_QCPGraphData;
typedef QCPAbstractPlottable1D<QCPBarsData>
QCPAbstractPlottable1D_QCPBarsData;
%End
...
};
The generated code is:
#include <QCustomPlot/src/qcp.h>
typedef QCPAbstractPlottable1D_QCPBarsData<QCPGraphData>
QCPAbstractPlottable1D_QCPBarsData_QCPGraphData;
typedef QCPAbstractPlottable1D_QCPBarsData<QCPBarsData>
QCPAbstractPlottable1D_QCPBarsData_QCPBarsData;
Note that the typedefs have been somewhat elaborated, not just copied
verbatim and somehow got screwed.
Maybe this is intentional and for sure I am by no means a SIP expert but
at least it looks weird.
If it is intentional please excuse me for the unneeded noise.
--
Giuseppe Corbelli
More information about the PyQt
mailing list