<p dir="ltr">Den 9 mars 2017 8:09 em skrev "Shaheed Haque" <<a href="mailto:srhaque@theiet.org">srhaque@theiet.org</a>>:<br>
><br>
> Yup, that fixed it. Thanks!</p>
<p dir="ltr">So please throw my ramblings in the garbage bin :)</p>
<p dir="ltr">Elvis</p>
<p dir="ltr">><br>
> For the record, it only seems to cause a problem when the base class<br>
> (the one exposing the public function) has virtual methods, which is<br>
> why most classes were not exhibiting the problem. But rather than rely<br>
> on this, I just turned all private methods on.<br>
><br>
> On 9 March 2017 at 13:41, Phil Thompson <<a href="mailto:phil@riverbankcomputing.com">phil@riverbankcomputing.com</a>> wrote:<br>
> > On 09/03/2017 07:10, Shaheed Haque wrote:<br>
> >><br>
> >> Hi,<br>
> >><br>
> >> I have come across some odd behaviour from SIP for a few of the files<br>
> >> I am generating such that SIP seems to be treating private methods as<br>
> >> if they were not private. For example, in one such case, the C++<br>
> >> header looks like this:<br>
> >><br>
> >> /usr/include/KF5/AkonadiCore/tagmodel.h<br>
> >> ==============================<br>
> >> namespace Akonadi {<br>
> >> class TagModel: public QAbstractItemModel {<br>
> >> ...<br>
> >> Q_SIGNALS:<br>
> >> void populated();<br>
> >><br>
> >> private:<br>
> >> bool insertRows(int row, int count, const QModelIndex &index =<br>
> >> QModelIndex()) Q_DECL_OVERRIDE;<br>
> >> bool insertColumns(int column, int count, const QModelIndex &index<br>
> >> = QModelIndex()) Q_DECL_OVERRIDE;<br>
> >> bool removeColumns(int column, int count, const QModelIndex &index<br>
> >> = QModelIndex()) Q_DECL_OVERRIDE;<br>
> >> bool removeRows(int row, int count, const QModelIndex &index =<br>
> >> QModelIndex()) Q_DECL_OVERRIDE;<br>
> >> ...<br>
> >> };<br>
> >> ==============================<br>
> >><br>
> >> And the SIP file says:<br>
> >><br>
> >> ==============================<br>
> >> namespace Akonadi {<br>
> >> class TagModel: QAbstractItemModel {<br>
> >> ...<br>
> >> Q_SIGNALS:<br>
> >> void populated();<br>
> >> private:<br>
> >> private:<br>
> >> // Generated for tagmodel.h, CLASS_DECL on line 36 'TagModel'<br>
> >> (by sip_generator.py:_container_get): non-copyable type handling<br>
> >> TagModel(const Akonadi::TagModel &);<br>
> >> };<br>
> >> };<br>
> >> ==============================<br>
> >><br>
> >> Notice how the SIP does not contain the private member insertRows(),<br>
> >> e.g. after the populated() Q_SIGNAL. However, when I try to compile<br>
> >> the generated SIP, I see errors like this:<br>
> >><br>
> >> ==============================<br>
> >> In file included from unifiedAkonadiCore.cpp:36:0:<br>
> >> tmp2/tmp/PyKF5/AkonadiCore/sipAkonadiCoreAkonadiTagModel.cpp: In<br>
> >> member function ‘virtual bool sipAkonadi_TagModel::insertRows(int,<br>
> >> int, const QModelIndex&)’:<br>
> >> tmp2/tmp/PyKF5/AkonadiCore/sipAkonadiCoreAkonadiTagModel.cpp:2564:54:<br>
> >> error: ‘virtual bool Akonadi::TagModel::insertRows(int, int, const<br>
> >> QModelIndex&)’ is private within this context<br>
> >> In file included from /usr/include/KF5/AkonadiCore/TagModel:1:0,<br>
> >> from tmp/AkonadiCore/TagModel.sip:28,<br>
> >> from unifiedAkonadiCore.cpp:8:<br>
> >> /usr/include/KF5/AkonadiCore/tagmodel.h:83:10: note: declared private here<br>
> >> bool insertRows(int row, int count, const QModelIndex &index =<br>
> >> QModelIndex()) Q_DECL_OVERRIDE;<br>
> >> ^~~~~~~~~~<br>
> >> ===============================<br>
> >><br>
> >> And sure enough, the generated class sipAkonadi_TagMode has a<br>
> >> protected member for insertRows() in the section commented "There is a<br>
> >> protected method for every virtual method...". Have I missed something<br>
> >> or is this a known issue?<br>
> ><br>
> ><br>
> > You need to add the private methods to the .sip file.<br>
> ><br>
> > Phil<br>
> _______________________________________________<br>
> PyQt mailing list <a href="mailto:PyQt@riverbankcomputing.com">PyQt@riverbankcomputing.com</a><br>
> <a href="https://www.riverbankcomputing.com/mailman/listinfo/pyqt">https://www.riverbankcomputing.com/mailman/listinfo/pyqt</a><br></p>