-
Bug
-
Resolution: Cannot Reproduce
-
P2: Important
-
None
-
5.7.0
-
None
-
Windows 10x64. Qt 5.7.0. Compiler : MinGW 32 bit.
Hi!
How to set object of *std::function* as parameter for signal and slot?
Example:
signals:
void sendSetProcFunc(const std::function<void (const QImage &,
QList<QPolygon> &,
QList<QImage> &)>
&procFunc);
...................................
public slots:
void onSetProcFunc(const std::function<void (const QImage &,
QList<QPolygon> &,
QList<QImage> &)>
&procFunc);
Building in Qt 5.7 with MinGW_32bit gives next errors:
debug\moc_QtCVGUI.cpp: In static member function 'static void QtCVGUI::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)':
debug\moc_QtCVGUI.cpp:131:128: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
case 2: _t->sendSetProcFunc((*reinterpret_cast< const std::function<const void( QImage&,QList<QPolygon>&,QList<QImage>&)>(*)>(_a[1]))); break;
^
debug\moc_QtCVGUI.cpp:131:142: error: no matching function for call to 'QtCVGUI::sendSetProcFunc(const std::function<const void(QImage&, QList<QPolygon>&, QList<QImage>&)>&)'
case 2: _t->sendSetProcFunc((*reinterpret_cast< const std::function<const void( QImage&,QList<QPolygon>&,QList<QImage>&)>(*)>(_a[1]))); break;
^
In file included from debug\moc_QtCVGUI.cpp:9:0:
****/QtCVGUI.h:49:10: note: candidate: void QtCVGUI::sendSetProcFunc(const std::function<void(const QImage&, QList<QPolygon>&, QList<QImage>&)>&)
void sendSetProcFunc(const std::function<void (const QImage &,
^
****/QtCVGUI.h:49:10: note: no known conversion for argument 1 from 'const std::function<const void(QImage&, QList<QPolygon>&, QList<QImage>&)>' to 'const std::function<void(const QImage&, QList<QPolygon>&, QList<QImage>&)>&'
Removing of all *const* and setting of *std::function* as usual variable (NOT reference) solve this problem (i.e. make succesful build).
Why are there such restrictions and how to bypass them?
void sendSetProcFunc(std::function<void (QImage &,
QList<QPolygon> &,
QList<QImage> &)>
procFunc);
----------
Update:
I didn't properly check all combinations.
This builds successfull:
void sendSetProcFunc(const std::function<void (QImage &, QList<QPolygon> &, QList<QImage> &)> &procFunc); void onSetProcFunc(const std::function<void (QImage &, QList<QPolygon> &, QList<QImage> &)> &procFunc);
----------
Update:
Workaround was found https://forum.qt.io/topic/78860/using-std-function-as-parameter-for-slot-and-signal/8