2014-09-23 8 views
0

Я новичок в Qt и испытываю некоторые проблемы при использовании Qserialport. Мне нужно получить и управлять пакетами данных с автопилота и показать их на своего рода компасе. , но я не знаю, как получать данные в потоке и использовать их в моей основной программе. Я знаю, как использовать Qserialport, и раньше я использовал thread. но теперь я не знаю, как правильно их использовать. Мне действительно нужен пример кода. любой ответ может помочь. и извините, если мой английский язык не так хорош.Qt - как читать данные из последовательного порта в потоке

ответ

1

Данные можно считывать асинхронным способом. Просто подключите сигнал readyRead() от QSerialPort к слоту. readyRead() испускается всякий раз, когда новые данные доступны:

connect(&serial, SIGNAL(readyRead()), this, SLOT(readData())); 

readData() слот, который вызывается каждый раз, когда QSerialPort излучает readyRead() сигнал. readData() присоединяет любые доступные данные члену в QByteArray класса:

void MyClass::readData() 
{ 
    receivedData.append(serial.readAll()); 

    if(receivedData.count()>=someAmount) 
    { 
     //Use data and remove used data from receivedData 
     ... 
    } 
} 
+0

спасибо за ответ, что это действительно помогает. но у меня есть другой вопрос. когда я использую readAll(), он будет считывать все входящие данные и хранить их в QbyteArray, правильно? теперь как я могу управлять этими данными и передавать некоторые байты из них в мои основные параметры программы? – 2014-09-23 06:52:01

+0

Да, вы прочитали все данные и сохранили их в 'QByteArray'. Что вы подразумеваете под «основными параметрами программы»? – Nejat

+0

пакет дырок, считываемый в потоке и хранящийся в QByteArray. теперь мой вопрос заключается в том, как я могу управлять этим, например, 48-байтовыми пакетными данными и передать 4 байта из него, например, поплавком в моем пользовательском интерфейсе? – 2014-09-23 07:37:13

Смежные вопросы