Название: Как правильно передавать объекты в слот? Отправлено: billygates от Январь 15, 2010, 16:23 В коде класса, которые может инициировать сигналы:
Код: MyObject* obj = ObjectMaker(arg1, arg2); // фабрика По указателю как здесь? Используя что-то вроде QSharedPointer? Или как-то иначе? P.S. MyObject не является потомком QObject. Спасибо. Название: Re: Как правильно передавать объекты в слот? Отправлено: BRE от Январь 15, 2010, 16:32 Цитировать The optional type parameter describes the type of connection to establish. In particular, it determines whether a particular signal is delivered to a slot immediately or queued for delivery at a later time. If the signal is queued, the parameters must be of types that are known to Qt's meta-object system, because Qt needs to copy the arguments to store them in an event behind the scenes. If you try to use a queued connection and get the error message QObject::connect: Cannot queue arguments of type 'MyType' (Make sure 'MyType' is registered using qRegisterMetaType().) call qRegisterMetaType() to register the data type before you establish the connection. Название: Re: Как правильно передавать объекты в слот? Отправлено: Dendy от Январь 15, 2010, 17:49 Что хранится в MyObject и какая задача возлагается на сигнал?
Название: Re: Как правильно передавать объекты в слот? Отправлено: billygates от Январь 16, 2010, 14:28 Что хранится в MyObject и какая задача возлагается на сигнал? Есть класс AA, работающий асинхронно. В некоторые моменты времени этот класс инициирует сигнал с данными, обрабатываемый слотом класса BB, агрегирующий экземпляр AA. Класс BB парсит полученные данные и представляет их ввиде полиморфных объектов MyObject и сигнализирует об этом основному приложению, что появились данные, передавая их.Название: Re: Как правильно передавать объекты в слот? Отправлено: Dendy от Январь 16, 2010, 14:39 Если тип соединения Qt::DirectConnection или Qt::QueuedBlockingConnection, то можно просто передавать указатель - он передастся синхронно, как будто просто вызвали метод с указателем в качестве аргумента. Если нужно обеспечить копирование, автоматическое удаление и потокобезопастность данных - заверните их в QSharedDataPointer.
|