Название: Два сигнала в один слот Отправлено: PulSar.CE3194694 от Август 13, 2010, 21:27 Добрый день!
Вопрос такой: можно отправить два и более сигналов в один слот? Например, когда оба сигнала передают передают какие-нибудь значения. Название: Re: Два сигнала в один слот Отправлено: SimpleSunny от Август 13, 2010, 22:31 Соединить необходимое количество сигналов с одним слотом.
Название: Re: Два сигнала в один слот Отправлено: lit-uriy от Август 13, 2010, 22:52 >>Вопрос такой: можно отправить два и более сигналов в один слот?
Ответ: да Название: Re: Два сигнала в один слот Отправлено: PulSar.CE3194694 от Август 17, 2010, 13:56 Хорошо, вот слот: void MainWindow::MySlot(int Q, double W, bool E) Кроме сигнала MySignal(Q, W, E) хочу, например, в него послать эти: MySignal1(QLine line) и MySignal2(QMatrix matrix, double *QWERTY). Как это сделать? Если просто их сконектить со слотом, то вылезет ошибка.
Название: Re: Два сигнала в один слот Отправлено: Anarion от Август 17, 2010, 14:08 А Вы различные по типу и количеству параметры передаете.
Название: Re: Два сигнала в один слот Отправлено: labview от Август 17, 2010, 14:09 Либо используй несколько слотов, на каждый тип данных, либо один слот, но тогда нужно передавать "неопределённый" тип данных, например Byte Array, который в дальнейшем в слоте преобразуется в нужный тип данных с помощью кастинга. О типе данных тоже нужно сообщать слоту с помощью еньюмератора например.
Могу ошибатьса, я сам новичёк... Название: Re: Два сигнала в один слот Отправлено: Anarion от Август 17, 2010, 14:12 Ну если уж прямо нужно все сигналы в один этот слот, то сделай для слота все возможные параметры, которые требуется получить от всех сигналов, а при эмите сигналов ненужные в данном контретном случае параметры отправляй нулевыми. Но только потом придется разбираться, сигнал с какими параметрами пришел. Так что все таки лучше на каждый набор параметров свой слот.
Название: Re: Два сигнала в один слот Отправлено: labview от Август 23, 2010, 17:47 Подскажите пожалуйста какой тип данных можно использовать для передачи любых данных. Подойдёт ли QVariant? Или стоит попробовать QByteArray? Может быть лучше взять union?
Название: Re: Два сигнала в один слот Отправлено: BRE от Август 23, 2010, 17:49 Подскажите пожалуйста какой тип данных можно использовать для передачи любых данных. Подойдёт ли QVariant? Или стоит попробовать QByteArray? Может быть лучше взять union? Ты по подробней расскажи про данные.А вообще данные можно даже в текстовом виде передавать. Название: Re: Два сигнала в один слот Отправлено: labview от Август 23, 2010, 18:04 Данные разные, нужен какой нибудь универсальный тип, который может содержать любые структуры. Текстовый тип (всмысле ASCII) не интересует, т.к. преобразование в текст лишнее. Думаю скорее всего использовать QByteArray и длину массива (содержимого) вписывать в первые два байта.
Название: Re: Два сигнала в один слот Отправлено: BRE от Август 23, 2010, 18:07 Думаю скорее всего использовать QByteArray и длину массива (содержимого) вписывать в первые два байта. Ну если разбор бинарных данных тебя интересует больше текстовых, тогда можно и его.Только длину можно не вписывать, приемник получит этот массив со всеми его атрибутами, т.е. QByteArray::size() будет возвращать количество байт в массиве. Название: Re: Два сигнала в один слот Отправлено: labview от Август 23, 2010, 18:09 Или всё же QVariant с метатипом будет удобнее?
Название: Re: Два сигнала в один слот Отправлено: BRE от Август 23, 2010, 18:11 Или всё же QVariant с метатипом будет удобнее? Ты структуры хочешь передавать или это могут быть данные переменной длины или ...Название: Re: Два сигнала в один слот Отправлено: labview от Август 23, 2010, 18:12 В основном структуры, состоящие из 1-5 элементов. Среди них конечно может встретиться например и QString, который конечно имеет свою длину.
Название: Re: Два сигнала в один слот Отправлено: BRE от Август 23, 2010, 18:20 В основном структуры, состоящие из 1-5 элементов. Среди них конечно может встретиться например и QString, который конечно имеет свою длину. Для структур можно и QVariant использовать.Только, IMHO, куда-то ты не туда пошел. Вот меня слот который будет один на всю программу, получать любые данные и исполнять все возможное, честно говоря пугает. Хорошо ли ты все спроектировал? Название: Re: Два сигнала в один слот Отправлено: labview от Август 23, 2010, 18:25 Речь идёт об этом:
http://www.prog.org.ru/topic_14426_0.html Пишу здесь, т.к. система схожа с системой сигналов и слотов. А что страшного в сериализации? Я подкреплю передаваемые типы данных тайпдефами, и должно быть чики чики. Название: Re: Два сигнала в один слот Отправлено: BRE от Август 23, 2010, 18:37 Ааа, ты от сенсоров хочешь все данные на один слот завести?
Я думал ты хочешь сделать слот, который будет обслуживать совершенно разные сигналы. Название: Re: Два сигнала в один слот Отправлено: labview от Август 23, 2010, 18:39 Я думал ты хочешь сделать слот, который будет обслуживать совершенно разные сигналы. Именно это, а потом свитчем обрабатывать. ЗЫ эта штука называется Queued State Machine и довольно широко используется. Название: Re: Два сигнала в один слот Отправлено: BRE от Август 23, 2010, 18:42 Именно это, а потом свитчем обрабатывать. Хм, но сигналы то хоть будут однотипные? Или он будет обслуживать сенсоры, пользовательский ввод, таймеры, сеть и т.д. :)ЗЫ эта штука называется Queued State Machine и довольно широко используется. Название: Re: Два сигнала в один слот Отправлено: labview от Август 23, 2010, 18:43 На определённый тип задач свой поток, у каждого потока один слот. Задания разнотипные.
Пример (образно): поток TCP_Port. сигналы (задания) + параметры: OpenPort(IPAdress, PortNr) ClosePort() Read(NrOfBytes) Write(ByteArray) Вот параметры я и хочу запихать в структуры, а какие именно параметры (структура для декодирования) зависит от типа сигнала (номера задания). |