Название: sender() после invokeMethod() просьба проверить в последних версиях Отправлено: Гурман от Декабрь 16, 2014, 21:12 Кто пользуется последними версиями Qt, просьба проверить - после invokeMethod() внутри слота-получателя QObject::sender() тоже 0 возвращает?
Название: Re: sender() после invokeMethod() просьба проверить в последних версиях Отправлено: Пантер от Декабрь 16, 2014, 21:32 Проверить не могу, но должно возвращать, по-идее. Это же не сигналом вызван слот.
Название: Re: sender() после invokeMethod() просьба проверить в последних версиях Отправлено: kambala от Декабрь 16, 2014, 21:34 хоть бы тестовый проект скинул
Название: Re: sender() после invokeMethod() просьба проверить в последних версиях Отправлено: Пантер от Декабрь 16, 2014, 21:38 хоть бы тестовый проект скинул Плюсадин этому господину.Название: Re: sender() после invokeMethod() просьба проверить в последних версиях Отправлено: Гурман от Декабрь 16, 2014, 22:08 А чего, никто простой рабочий проект открытый не имеет?
в каком-то одном Q-объекте, который работает при запуске Код: QObject* test; в каком-то другом Q-объекте, указатель на который выше передан в someQObject, прямо в описателе его класса: Код: QObject* testMethod(QString s) { qDebug() << s; return sender();} и запустить Название: Re: sender() после invokeMethod() просьба проверить в последних версиях Отправлено: Гурман от Декабрь 16, 2014, 22:08 Проверить не могу, но должно возвращать, по-идее. Это же не сигналом вызван слот. Я тоже так думаю, но в Qt 4.7 получаю пока 0 :( может баг версии... Название: Re: sender() после invokeMethod() просьба проверить в последних версиях Отправлено: Пантер от Декабрь 16, 2014, 22:33 Проверить не могу, но должно возвращать, по-идее. Это же не сигналом вызван слот. Я тоже так думаю, но в Qt 4.7 получаю пока 0 :( может баг версии... Название: Re: sender() после invokeMethod() просьба проверить в последних версиях Отправлено: Гурман от Декабрь 16, 2014, 22:39 Проверить не могу, но должно возвращать, по-идее. Это же не сигналом вызван слот. Я тоже так думаю, но в Qt 4.7 получаю пока 0 :( может баг версии... А какая разница??? Механизм используется фактически тот же, даже может также вызывать напрямую или через очередь. Вызывает также QObject, как и в случае сигнала. То есть, указатель на отправителя тоже известен. Название: Re: sender() после invokeMethod() просьба проверить в последних версиях Отправлено: Пантер от Декабрь 16, 2014, 22:51 Инвокнуть метод можно из любого класса или вообще свободной функции. ;)
Название: Re: sender() после invokeMethod() просьба проверить в последних версиях Отправлено: kambala от Декабрь 16, 2014, 22:57 возвращает 0 в 4.8.5, 5.3.2 и 5.4
Название: Re: sender() после invokeMethod() просьба проверить в последних версиях Отправлено: Гурман от Декабрь 16, 2014, 23:01 Инвокнуть метод можно из любого класса или вообще свободной функции. ;) В любом случае его нельзя инвокнуть без QMetaObject::metaObject(), а эта функция в this получает указатель на объект, который вызывает. То есть, всегда есть этот указатель. Название: Re: sender() после invokeMethod() просьба проверить в последних версиях Отправлено: Bepec от Декабрь 16, 2014, 23:08 Её можно вообще из любого кода вызвать. Так что 0 - вполне ожидаемое и нормальное поведение.
PS прям из main вызывайте. Интересно какой this будет :) Название: Re: sender() после invokeMethod() просьба проверить в последних версиях Отправлено: Гурман от Декабрь 16, 2014, 23:19 Её можно вообще из любого кода вызвать. Так что 0 - вполне ожидаемое и нормальное поведение. PS прям из main вызывайте. Интересно какой this будет :) Из main можно вызвать как static функцию - и будет у неё честный this на некоторый объект. Как у любой static функции. Ну и фик с ним. В таком случае можно было бы и 0 передавать. Зато можно было бы вызывать как свой мета-метод из QObject, и тогда в слоте можно было бы автоматом получить указатель на вызывающего, и ответить ему с помощью такого же invokeMethod(). А на 0 все равно проверять всегда надо. Название: Re: sender() после invokeMethod() просьба проверить в последних k Отправлено: Johnik от Декабрь 17, 2014, 00:12 В документации четко написано:
Код
Код: Returns a pointer to the object that sent the signal, if called in a slot activated by a signal; otherwise it returns 0. Название: Re: sender() после invokeMethod() просьба проверить в последних версиях Отправлено: Old от Декабрь 17, 2014, 07:36 В любом случае его нельзя инвокнуть без QMetaObject::metaObject(), а эта функция в this получает указатель на объект, который вызывает. То есть, всегда есть этот указатель. Вы ошибаетесь, invokeMethod статическая функция, никакой this ей не нужен.Название: Re: sender() после invokeMethod() просьба проверить в последних версиях Отправлено: Igors от Декабрь 17, 2014, 09:36 Из main можно вызвать как static функцию - и будет у неё честный this на некоторый объект. Как у любой static функции. Мне об этом ничего не известно. Какой this у static метода ???возвращает 0 в 4.8.5, 5.3.2 и 5.4 Хоть бы спасибо сказал :)Название: Re: sender() после invokeMethod() просьба проверить в последних версиях Отправлено: _OLEGator_ от Декабрь 17, 2014, 10:12 Добавил бы в слот дополнительный аргумент с QObject* и все, а то столько страданий не из-за чего.
Название: Re: sender() после invokeMethod() просьба проверить в последних версиях Отправлено: Гурман от Декабрь 17, 2014, 12:26 возвращает 0 в 4.8.5, 5.3.2 и 5.4 Хоть бы спасибо сказал :)Спасибо. Название: Re: sender() после invokeMethod() просьба проверить в последних версиях Отправлено: Гурман от Декабрь 17, 2014, 12:28 Добавил бы в слот дополнительный аргумент с QObject* и все, а то столько страданий не из-за чего. Так приходится добавлять его при каждом вызове с помощью invokeMethod. |