Название: [Решено] QSerialPort. Runtime error Отправлено: 8Observer8 от Август 27, 2014, 10:16 Привет!
Проблема в том, что приложение завершается ошибкой времени выполнения, когда я нажимаю кнопку "startTransmissionButton", при нажатии на которой байт должен отправиться в COM-порт Порт почему-то не открывается. Хотя должен. Функция m_port.errorString().toStdString() выдаёт сообщение: Цитировать The filename, directory name, or volume label syntax is incorrect. Но даже если он не открывается, то функция m_port.isOpen() должна вернуть false, но как раз в момент её выполнения случается ошибка: (http://i6.pixs.ru/storage/8/5/4/298png_1573462_13584854.png) Я сделал минимальный проект, который демонстрирует проблему: https://github.com/8Observer8/ComPort Заранее спасибо за помощь! Название: Re: QSerialPort. Runtime error Отправлено: kuzulis от Август 27, 2014, 10:40 Что за тип сериал порта используется?
Название: Re: QSerialPort. Runtime error Отправлено: 8Observer8 от Август 27, 2014, 10:45 Всмысле? У меня пара виртуальных портов COM1-COM2:
(http://i6.pixs.ru/storage/2/3/3/299png_4870990_13585233.png) Название: Re: QSerialPort. Runtime error Отправлено: Bepec от Август 27, 2014, 10:48 Код: Sender::Sender( const QString &portName, Вас не смущает что m_portName у вас не инициализировано? Название: Re: QSerialPort. Runtime error Отправлено: Silver_swift от Август 27, 2014, 10:50 Цитировать Вас не смущает что m_portName у вас не инициализировано? m_port создается на стеке. В Qt 5.2.1 в Linux была такая особенность: сперва надо задать все настройки, потом открыть порт иначе программа падала. Возможно причина в этом. Название: Re: QSerialPort. Runtime error Отправлено: 8Observer8 от Август 27, 2014, 11:01 Код: Sender::Sender( const QString &portName, Вас не смущает что m_portName у вас не инициализировано? В Qt 5.2.1 в Linux была такая особенность: сперва надо задать все настройки, потом открыть порт иначе программа падала. Возможно причина в этом. Я где-то слышал, что надо сначала открыть, а потом задать настройки. Как всё же правильно то?А программа работает теперь :) Название: Re: QSerialPort. Runtime error Отправлено: Bepec от Август 27, 2014, 11:08 Чуть внимательнее надо быть Silver_swift. Тут дублирование переменных с разницами в названиях. А произошло это то ли из-за невнимательности программиста, или же из-за того, что не определился программист какому форматированию следовать.
PS И к тому же контроль ошибок никакой. Отловятся конечно эксепшены, но информацию надо проверять ДО запуска процесса. Название: Re: QSerialPort. Runtime error Отправлено: Silver_swift от Август 27, 2014, 11:10 Цитировать Я где-то слышал, что надо сначала открыть, а потом задать настройки. Как всё же правильно то? Да хз, я такое заметил когда рабочая программа под Qt 5.3.1 стала падать будучи собранной на Qt 5.2, вылечил вызовом open после настроек :) port'ов и portName'ов в коде много, не сразу понял о чем говорит Верес, извиняюсь :))) upd: Опередили :) Название: Re: QSerialPort. Runtime error Отправлено: kuzulis от Август 27, 2014, 11:19 Цитировать Я где-то слышал, что надо сначала открыть, а потом задать настройки. Как всё же правильно то? Начиная с 5.3.0 - без разницы как. Теперь можно задавать настройки перед открытием, но все-равно реально они примутся только после успешного open(). Но в любом случае нужно проверять коды возврата всех методов (ну, или ловить сигнал ошибки). Цитировать Надо было так написать: m_portName( portName ) Но проще вообще удалить эту запись (и удалить переменную m_portName) , т.к. порт уже инициализируется именем m_port( portName ), Название: Re: QSerialPort. Runtime error Отправлено: 8Observer8 от Август 27, 2014, 11:48 Да, вы правы! Слишком похожи имена m_port и m_portName, поэтому я заменил эту строку:
Код на эту: Код
Но проще вообще удалить эту запись (и удалить переменную m_portName) , т.к. порт уже инициализируется именем m_port( portName ) Удалил и программ стала короче примерно на пять строк:Код В конструкторе теперь так написано: "m_serialPort( portName )," Я думаю, что порт надо открывать не в конструкторе Sender. Поэтому я сделал отдельную функцию open(): https://github.com/8Observer8/ComPort Название: Re: QSerialPort. Runtime error Отправлено: Bepec от Август 27, 2014, 12:22 мдамс. Такой бы энтузиазм да в правильное русло :)
|