Название: Qt template Отправлено: jaroslav от Июль 15, 2013, 23:57 Привет! Подскажите плиз, что не так делаю.
Есть функция: Код: template <typename T> void execAction(const QString &stored, const T &value); Вот реализация: Код: template <typename T> void MyClass::execAction(const QString &stored, const T &value){ Вызываю так: Код: execAction("slotCopyRecords", 1); Слот не срабатывает, выдает Код: QMetaObject::invokeMethod: No such method MyClass::slotCopyRecords(T) Название: Re: Qt template Отправлено: kambala от Июль 16, 2013, 01:06 Q_ARG – это макрос, который о типе T ничего не знает, так что шаблон тут не сработает
Название: Re: Qt template Отправлено: jaroslav от Июль 16, 2013, 01:10 Может есть идеи решения проблемы? Поделитесь пожалуйста. Хотелось бы в функцию передавать разного типа данные, и что-б invokeMethod это хавал нормально.
Название: Re: Qt template Отправлено: kambala от Июль 16, 2013, 01:54 если execAction() вызывается напрямую (не из потока), то можно попробовать передавать указатель на метод вместо строки и его уже вызывать для object
Название: Re: Qt template Отправлено: jaroslav от Июль 16, 2013, 15:02 Спасибо kambala за помощь. Сделал вот как:
Переделал функцию: Код: void LogisticMainWindow::execAction(const QString &stored, const QVariant &arg) Вместо template, заюзал QVariant, с подгонкой типа относительно введенных данных. Код:
И вызов самого invokeMethod: Код: QMetaObject::invokeMethod(Object*, QString("%1").arg(stored).toUtf8().constData(), genericArgument); Название: Re: Qt template Отправлено: kambala от Июль 16, 2013, 15:18 а зачем надо так хитро создавать строку метода вместо обычного stored.toUtf8().constData()?
Название: Re: Qt template Отправлено: jaroslav от Июль 16, 2013, 18:14 Да, вполне можно и так. Спасибо!
|