Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2011, 13:58   #1
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию Qt + com-порт

Каким образом заставить Qt считывать данные в момент их прихода в порт?
Т.е. алгоритм выглядит так:
Цитата:
Данные пришли - сработал сигнал - данные считаны с порта - ожидание следующего сигнала о приходе данных
Такие сигналы есть? На WinAPI не хотелось бы концентрироваться, т.к. программа, возможно, будет эксплуатироваться под Linux.
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 10.02.2011, 15:00   #2
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Для работы с rs232 в кьюте по дефолту ничего нету. Но есть QextSerialPort — отдельный проект. Он унаследован от QIODevice.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 10.02.2011, 16:05   #3
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Нашел такую штуку, как:
Код:
void QIODevice::readyRead () [signal]
Цитата:
This signal is emitted once every time new data is available for reading from the device. It will only be emitted again once new data is available, such as when a new payload of network data has arrived on your network socket, or when a new block of data has been appended to your device.

readyRead() is not emitted recursively; if you reenter the event loop or call waitForReadyRead() inside a slot connected to the readyRead() signal, the signal will not be reemitted (although waitForReadyRead() may still return true).
Исходя из вышеописанного получается, что каждый раз после срабатывания readyRead надо вызывать waitForReadyRead(), т.к. readyRead вызывается однократно. Я правильно понял описание?
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 10.02.2011, 19:41   #4
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Там не это написано. Там написано, что если ты внутри слота, подключенному к readyRead() запустишь новый event loop или вызовешь waitForReadyRead(), то оно не будет ничего делать (иначе бы ты потенциально мог попасть в бесконечную рекурсию). readyRead пускается само, не более одного раза за event loop, вот и всё. Что такое event loop, представляешь, надеюсь?
(но таки да, косвенно получается, что надо вызывать waitForReadyRead() когда мы можем принять новые данные, причём можно делать это прямо в слоте, принимающем readyRead)

Кстати, помимо QextSerialPort есть QSerialDevice и QSerialPort. Я тут погуглил, вроде как QSerialDevice лучше. Но фиг знает. Сам с QIODevice и всякими классами для rs232 в Qt не работал.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su

Последний раз редактировалось Obey-Kun; 10.02.2011 в 19:43.
Obey-Kun вне форума Ответить с цитированием
Старый 21.04.2011, 14:18   #5
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Проявилась бага. При прописывании
Код:
#include <qextserialport/qextserialport.h>
Для всех следующих объявлений а-ля
Код:
namespace Ui {
    class interface;
}
или
Код:
class interface : public QWidget
{
    Q_OBJECT
    ...
}
Вылазит ошибка
Цитата:
wrong type specifier
При этом для контроля рядом лежит написанный не мной класс threadcomport, для которого все нормально работает. Что я делаю не так?
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)

Последний раз редактировалось Vanta11a; 21.04.2011 в 14:27.
Vanta11a вне форума Ответить с цитированием
Старый 26.04.2011, 14:48   #6
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Ответ оказался прост - в qextserialport была строка
Код:
#define interface _COM_interface
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)

Последний раз редактировалось Vanta11a; 26.04.2011 в 14:58.
Vanta11a вне форума Ответить с цитированием
Старый 28.04.2011, 04:13   #7
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Забавно .

Именуйте классы с большой буквы, кстати.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
com-порт Twinkle Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 17.06.2010 23:53
Порт Bat{CMD}_Men Работа с сетью в Delphi 1 20.12.2009 21:07
com порт Joslen_bomon Компьютерное железо 1 08.11.2009 12:25
COM-порт daunito Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 7 15.01.2009 18:50
COM порт SanekIrk Win Api 2 28.12.2008 06:20