Невозможно соединить QMetaMethod с лямбдой
У меня есть настройки базового класса Binded для привязки свойства в нем с заданными виджетами, как, например, LineEdit. Я застрял с подключением сигналов и слот. Как я вижу, это так же, как предоставленный код в ответе Как использовать QMetaMethod с QObject:: connect ^
class BindedSettings: public QObject
{
Q_OBJECT
public:
bool bindWtToProp(QLineEdit* targetWt, const char* propertyName);
bool stringFromVariant(const QVariant& val, QString& result){...}
}
в cpp:
bool BindedSettings::bindWtToProp(QLineEdit *targetWt, const char *propertyName)
{
QLineEdit* le = targetWt;
QMetaProperty mp = metaObject()->property(metaObject()->indexOfProperty(propertyName));
//connecting property notifiedSignal with reader lambda
QMetaMethod signal = mp.notifySignal();
connect(this, signal, this, [=](){
}); //reader
return true;
}
У меня есть некоторые классические соединения (без qmetamethod) в той же функции, но вот что я получаю
C:\Projects\some\settings.cpp:279: ошибка: нет соответствующей функции для вызова 'BindedSettings::connect(BindedSettings*, QMetaMethod&, BindedSettings*, BindedSettings::bindWtToProp(QLineEdit*, const char*)::)' connect(this, signal, this, ={});
1 ответ
Вы смешиваете 2 определения QObject::connect()
:
QMetaObject::Connection QObject::connect(const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method, Qt::ConnectionType type = Qt::AutoConnection)
QMetaObject::Connection QObject::connect(const QObject *sender, PointerToMemberFunction signal, const QObject *context, Functor functor, Qt::ConnectionType type = Qt::AutoConnection)
Но connect()
не имеет перегрузки, которая занимает как QMetaMethod
и Functor
,
Точно такой же вопрос уже задавался 5 лет назад на форуме Qt, ответ был:
Соединения с функторами / лямбдами используют указатели функций. Они должны быть разрешены во время компиляции, потому что компилятор должен знать, какие типы указателей на функции вы используете. Вы не можете использовать строки времени выполнения.
Я считаю, что ситуация не изменилась.