Название: как получить QMetaMethod слота по указателю? Отправлено: unkeep от Ноябрь 02, 2016, 10:13 есть статическая функция QMetaMethod::fromSignal(FuncPtr) для сигналов. А для слотов нету. Функция MetaObject::static_metacall(QMetaObject::IndexOfMethod, 0, args), которая используется в реализации fromSignal для слотов не работает.
Очень странно, я думал никаких проблем по указателю получить метаметод не будет, он же в конце концов где-то в каком-то виде его хранит... Название: Re: как получить QMetaMethod слота по указателю? Отправлено: GreatSnake от Ноябрь 02, 2016, 11:20 Очень странно, я думал никаких проблем по указателю получить метаметод не будет, он же в конце концов где-то в каком-то виде его хранит... Да ничего странного. В случае подобного коннекта используется уже не слот, а functor, на который мета-инфо просто отсутствует.Название: Re: как получить QMetaMethod слота по указателю? Отправлено: unkeep от Ноябрь 02, 2016, 12:13 Очень странно, я думал никаких проблем по указателю получить метаметод не будет, он же в конце концов где-то в каком-то виде его хранит... Да ничего странного. В случае подобного коннекта используется уже не слот, а functor, на который мета-инфо просто отсутствует.с коннектом-то понятно. Но если метод помечен как слот, QMetaMetod обязан же хранить указатель на метод. Или как по другому он сможет вызвать его?? Название: Re: как получить QMetaMethod слота по указателю? Отправлено: GreatSnake от Ноябрь 02, 2016, 12:29 Но если метод помечен как слот, QMetaMetod обязан же хранить указатель на метод. Или как по другому он сможет вызвать его?? Наверное обязан и даже хранит его где-то у себя внутри. Но совершенно не обязан его нам отдавать.Слот может быть вызван через QMetaObject::invokeMethod(). Название: Re: как получить QMetaMethod слота по указателю? Отправлено: ssoft от Ноябрь 02, 2016, 16:59 По указателю не знаю как, а вот по сигнатуре получить можно
Код
Название: Re: как получить QMetaMethod слота по указателю? Отправлено: unkeep от Февраль 09, 2017, 11:49 Хорошо. Пусть нельзя получить QMetaMethod по указателю на метод...
Как тогда реализовать макрос DECLARE_METHOD, чтобы замапить "указатель на метод" на "имя метода"? Код
и где-то можно было вызвать: Код
P.S такая реализация не собирается: Код
Цитировать expected a type, got '&ISomeClass::someMethod' struct MyMetaMethod< Func > |