Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Dorian от Декабрь 01, 2014, 15:29



Название: передача QList чрез сигнал/слот
Отправлено: Dorian от Декабрь 01, 2014, 15:29
Добрый вечер, изучаю qt застрял на проблеме:

У меня есть сервер(QTcperver)
В нем создается отдельный поток в потоке объявлен:
private:
QList<quint16*> list;
signals:
void exem_signal(QList<quint16*> list);

Выполняется поток и данные в формате quint16 записываю в list
затем вызываю сигнал
emit exem_signal(list);

у Сервера есть слот для обработки сигнала
public slost:
void exemp_slot(QList<quint16*> list)

Реализаця слота:
void Server::exem_slot(QList<quint16*> list)
{

}

так вызываю конект на сервере:
connect(search_thread, SIGNAL(exem_signalexem_signal(QList<quint16*>), this, SLOTexem_slot(exemp_slot(QList<quint16*> )))

Собственно понмаю что скорее всего намудрил с указателями чтото так как еще и параллельно с++ зучаю, просьба подсказать с чем намудрил.


Название: Re: передача QList чрез сигнал/слот
Отправлено: gil9red от Декабрь 01, 2014, 15:32
А для чего указатели использовать? У все же простой тип int, можно передавать по значению...


Название: Re: передача QList чрез сигнал/слот
Отправлено: Dorian от Декабрь 01, 2014, 15:44
я сначала делал без указателей, но во время выполнения программы выкидывало ошибку:
QObject::connect: Cannot queue arguments of type 'QList<quint16>'
(Make sure '<quint16>' is registered using qRegisterMetaType().)

я гуглил и наткнулся на форумах на решение проблемы если через указатели делать


Название: Re: передача QList чрез сигнал/слот
Отправлено: Fregloin от Декабрь 02, 2014, 15:06
почитайте про Q_DECLARE_METATYPE, а еще можно было указать так QList<unsigned short> или QList<uint16_t> (#include <types.h>)


Название: Re: передача QList чрез сигнал/слот
Отправлено: Fregloin от Декабрь 02, 2014, 15:08
и лучше передавать в сигнале и принимать в слоте по ссылке а не по значению, избежите ненужные копирования


Название: Re: передача QList чрез сигнал/слот
Отправлено: Dorian от Декабрь 03, 2014, 16:43
спасибо за советы, оба учел, проблема решена