Russian Qt Forum

Qt => Общие вопросы => Тема начата: Mike-Aiki от Декабрь 05, 2013, 13:12



Название: вопрос про 'new QSerialPort(this)'
Отправлено: Mike-Aiki от Декабрь 05, 2013, 13:12
Установил QSerialPort, Qt 4.8.5.  Объект создаю в конструкторе класса окна, типа:

[h]
QSerialPort* serial;

[cpp]
serial = new QSerialPort(this);
connect(serial ,SIGNAL(readyRead()),this,SLOT(slotReadingSerialData()));

(в порту заглушка, генерю тестовую посылку для проверки приема).
При этом, если компилить отладочную версию, при выполнении при создании объекта выдаётся

"QObject: Cannot create children for a parent that is in a different thread",

при этом сигнал readyRead() не генерится.
  Но, если компилить релиз, то никаких предупреждений не возникает, и вроде как всё работает, т.е. слот отрабатывает.

Тоже самое наблюдаю в поставляемом примере "terminal" - в отладочной версии выдаётся предупреждение, и не работает "эхо", в релизе - всё нормально.

Если создавать 'serial = new QSerialPort', то тоже не генерится сигнал, естественно.

Можно, конечно, создать тред, в котором что-то типа waitForReadyRead() крутить, но просто заинтересовало - это нормально,
что в релизе нет ругани, и всё работает? В своих проектах, если получал такой варнинг, то без соответствующего 'moveToThread()' ничего не работало...  ???


Название: Re: вопрос про 'new QSerialPort(this)'
Отправлено: Bepec от Декабрь 05, 2013, 14:33
Если вы в разных потоках пытаетесь писать что-то в порт - тогда он выдаст такую фигню и порт завянет.

Если же нет у вас таких ситуаций - просто пересоберите проект.