[Qt-creator] How does QtCreator support the "private" signals of e.g. QAbstractItemModel
Nikolai Kosjar
nikolai.kosjar at digia.com
Fri Aug 30 13:40:14 CEST 2013
On 08/30/2013 11:06 AM, Milian Wolff wrote:
> Hey there!
Hi!
> I'm wondering how you guys decided for QtCreator to support the "private"
> signals of QAbstractItemModel, such as "rowsAboutToBeInserted". They are
> declared in a section guarded by:
>
> #if !defined(Q_MOC_RUN) && !defined(qdoc)
> private: // can only be emitted by QAbstractItemModel
> #endif
>
> Do you guys define either of these macros while parsing the code? Or do you
> special-case these somehow to still support them as "proper" signals during
> code completion in a connect() statement?
Short answer: There is no special support.
Longer answer:
We don't define such macros while parsing, it's just that completion
proposals are not limited with respect to the access modifiers and
according to [0] this was done by design. Usually the access modifier is
encoded in the icon of an completion entry (e.g. member completion). For
emitting signals, it's a single icon without any hint on the access
level (maybe that's because "Q_SIGNALS" and "signals" are defined to
"public" by default). For completion within "connect(a, SIGNAL(" there
is not even an icon column (I'm not sure what the reasoning is behind
that, if there is any).
Note that things changed a bit with Qt5 (QAbstractItemModel again):
// Qt 5
public:
...
Q_SIGNALS:
...
void rowsAboutToBeInserted(const QModelIndex &parent, int first,
int last
#if !defined(Q_QDOC)
, QPrivateSignal
#endif
);
See also [0]. We do hide the "QPrivateSignal" last parameter for
"connect(a, SIGNAL(" completions.
Nikolai
[0] https://bugreports.qt-project.org/browse/QTCREATORBUG-1510
[1] http://woboq.com/blog/how-qt-signals-slots-work-part2-qt5.html ,
especially the section "Protected, Public, or Private Signals."
More information about the Qt-creator
mailing list