Russian Qt Forum
Май 19, 2024, 14:31 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QextSerialPort проблемы с чтением  (Прочитано 7729 раз)
rukudias
Гость
« : Май 07, 2009, 21:21 »

Привет Всем!
Использую обвертку для  QextSerialPort
Смысл обвертки в обдельном потоке слушать сом порт и вслучае прихода данных
слелать emit сигнал в класс обвертку

Код:
threadReceive = new ThreadReceive(extSerialPort);//объект обвертки сом порта
bool fl=QObject::connect(threadReceive, SIGNAL(newDataReceived(const QByteArray &)), this, SIGNAL(newDataReceived(const QByteArray &)));
receivingEnabled = true;


fl=false те соеденения не произошло
что может быть причиной?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Май 07, 2009, 21:24 »

а ты консольку выведи и Qt сама тебе всё расскажет.
Записан

Юра.
rukudias
Гость
« Ответ #2 : Май 07, 2009, 21:42 »

Сори этокак консольку? Непонимающий
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Май 07, 2009, 21:47 »

в файл проекта добавь строку:
CONFIG += console
Записан

Юра.
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #4 : Май 08, 2009, 00:10 »

Если используешь студию, смотри с Output при запуске программы. Весь вывод осуществляется туда.

ЗЫ: Былобы неплохо увидеть больше кода, например ThreadReceive.h
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
-QT-
Гость
« Ответ #5 : Май 08, 2009, 08:17 »

Привет Всем!
Использую обвертку для  QextSerialPort
Смысл обвертки в обдельном потоке слушать сом порт и вслучае прихода данных
слелать emit сигнал в класс обвертку

Код:
threadReceive = new ThreadReceive(extSerialPort);//объект обвертки сом порта
bool fl=QObject::connect(threadReceive, SIGNAL(newDataReceived(const QByteArray &)), this, SIGNAL(newDataReceived(const QByteArray &)));
receivingEnabled = true;


fl=false те соеденения не произошло
что может быть причиной?


Если мне не изменяет память то QextSerialPort сам создает отдельный поток при открытии порта. И Ваш отдельный поток тут
может и не нужен вовсе.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #6 : Май 08, 2009, 11:34 »

Если мне не изменяет память то QextSerialPort сам создает отдельный поток при открытии порта.

Напверное память изменила ))) Такого функционала в QextSerialPort нет
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
-QT-
Гость
« Ответ #7 : Май 08, 2009, 12:23 »

 Смеющийся« Ответ #5 : Сегодня в 08:17:15 » Смеющийся
Ага, улыбнуло, это я пораньше на работу приперся ...
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #8 : Май 08, 2009, 13:36 »

Я вот решил сделать свой класс для работы с последовательными портами, на базе QextSerialPort  Улыбающийся !

И там, (вQextSerialPort  )  для Windows куска НЕ РЕАЛИЗОВАН режим прослушки!!!  И вообще порт работает не в асинхронном режиме!!! т.е как вы его прослушиваете в таком случае ?  Улыбающийся Там только "тупо" перед чтением проверяется наличие данных в приемном буфере!

А я вот уже почти реализовал прослушку (в части win32 куска кода) и т.п. используя объекты ядра Win32, только у меня пока что небольшая проблема возникает при попытках закрыть порт  Улыбающийся но эт не важно, разберусь!

моя шапка (для Win куска) выглядит так:
Код:
class TWinSerialDevice:public TBaseSerialDevice {
    Q_OBJECT
public:
    TWinSerialDevice();
    TWinSerialDevice(const QString & deviceName);              //+

    virtual ~TWinSerialDevice();
    //параметры
    bool setBaudRate(TBaudRate);
    bool setDataBits(TDataBits);
    bool setParity(TParity);
    bool setStopBits(TStopBits);
    bool setFlowControl(TFlow);
    //таймауты
    bool setCharTimeout(ulong, ulong);

    bool open(OpenMode mode=0);
    void close();

    virtual qint64 bytesAvailable();
    //управление линиями
    bool setDtr(bool set=true);
    bool setRts(bool set=true);
    ulong lineStatus(void);

    virtual bool waitForReadyRead (int msecs);
    virtual bool waitForBytesWritten(int msecs);

private:
    HANDLE hd;
    COMMCONFIG cc, oldcc;
    COMMTIMEOUTS ct; //, oldct;

    virtual qint64 readData(char *data, qint64 maxSize);
    virtual qint64 writeData(const char *data, qint64 maxSize);
};

если кому надо - могу прислать исходники - только чур автора (т.е меня ) не переписывать и не менять! Улыбающийся
 
Записан

ArchLinux x86_64 / Win10 64 bit
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #9 : Май 08, 2009, 13:39 »

и еще, в QextSerialPort  нельзя емиттить ничаво, т.к нету макроса   Q_OBJECT !!! работать не буит! Улыбающийся (вроде)
Записан

ArchLinux x86_64 / Win10 64 bit
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.044 секунд. Запросов: 19.