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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Производный класс от QextSerialPort не работает :(  (Прочитано 7995 раз)
igvek
Гость
« : Февраль 03, 2009, 22:20 »

Здравствуйте,
задумал я сделать классик на основе QextSerialPort, но такая проблема, нужно что бы он обрабатывал сигналы, следовательно я добавляю макрос Q_OBJECT, НО, после запуска программа сразу закрывается с ошибкой. Судя по всему, нужно передавать дальше конструкторам QextSerialPort родительский QObject, но у конструкторов QextSerialPort такого в параметрах нет, поискал в инете, кое что нашел - но не могу понять чего не хватает.

Вот кратенько мой код:
Головешка:
Код:
class SerialPort: public QextSerialPort
{
    Q_OBJECT

    public:
        SerialPort();
        ~SerialPort();
};

Сишник:
Код:
SerialPort::SerialPort()
 : QextSerialPort()
{
}


SerialPort::~SerialPort()
{
}

В чем может быть дело? В QT-е я плохо секу, только начал изучать, так что сообразить в чем баг - не получается. Ну а если лень писать - то может у кого есть примерчик, мне бы хоть взглянуть, на .h .cpp файлы как правильно надо делать.



С Уважением,
Игорь.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Февраль 03, 2009, 22:28 »

Сделай обертку. т.е. создай наследника от QObject, а в нем переменную типа QextSerialPort, и ею пользуйся.
« Последнее редактирование: Февраль 03, 2009, 22:32 от lit-uriy » Записан

Юра.
igvek
Гость
« Ответ #2 : Февраль 03, 2009, 22:34 »

Сделай обертку. т.е. создай наследника от QObject, а в нем переменную типа QextSerialPort, и ею пользуйся.

Нее, переменная не подходит, эту возможность я оставлю на крайний случай...
Хотелось бы все-таки с наследованием класс сделать, и вроде у людей это получается, только вот не пойму как
Записан
igvek
Гость
« Ответ #3 : Февраль 03, 2009, 22:38 »

Дело в том, что без Q_OBJECT все работает и уже много чего написано под это, а теперь понадобились SIGNAL SLOT... Не хочется все переделывать, пока остается надежда, что можно не переделывать Подмигивающий ну вы меня понимаете Подмигивающий
Записан
igvek
Гость
« Ответ #4 : Февраль 03, 2009, 22:52 »

Кстати, еще вот что, нашел по ссылочке программку, которая наследует этот класс, НО, в исходниках прилагается файлы этой библиотеки, и они совсем не похожи на исходники с офф сайта QextSerialPort:

http://code.google.com/p/qtrdw125klib/source/browse/trunk/library/qextserialport.cpp?r=4&spec=svn4

Там то как раз и реализована передача parent по цепочке, до IODevice. Я вот все ломаю голову, это какая то старая версия либы или просто переделанная под себя библиотека. Может кто видел такой код? (вообще по коментарию вроде как исходник от Stefan Sander, т.е. от разработчика, но вот версия не указана, нипанятна)
Записан
igvek
Гость
« Ответ #5 : Февраль 04, 2009, 01:27 »

походу нашел, на офф сайте в cvs есть как раз та версия, с parent`ами, которых мне так и не хватало...
Версия называется q4extserialport.

Всем спасибо за помощь Улыбающийся удачи!
Записан
igvek
Гость
« Ответ #6 : Февраль 07, 2009, 17:49 »

Если кому интересно:
поковырялся я с этими версиями и выяснил следующее:
1. у релиза QextSerialPort (1.2win-alpha) нет возможности передавать в конструктор parent, что не позволяет использовать его для наследования в своих классах.
2. у cvs версии q4extserialport есть возможность передавать parent родителя в конструктор, НО, нет отдельного потока ожидания данных, т.е. нет сигнала readyRead (и других сигналов), т.е. q4extserialport не работает в режиме OVERLAPPED, что иногда не удобно. Возможно в новой версии они добавят таки эту полезную штуку, но пока нет.

Увы, для моей задачи нужно было и передавать родителя конструктору, и использовать режим OVERLAPPED при открытии COM-порта. Чиста для себя сделал слепку. соединив эти две ветки, старался вносить как можно меньше изменений, в результате код выглядит почти так же как в qextserialport и q4extserialport. Если кому интересно, могу поделиться исходниками (хотя слепить - дело не хитрое, и делается довольно быстро).

PS: все выше написанное - относится только для компиляции под Windows.


С Уважением, Игорь.
Записан
kirill
Гость
« Ответ #7 : Февраль 09, 2009, 07:20 »

а если сделать множественное наследование?
class SerialPort: public QextSerialPort, public QObject
{
    Q_OBJECT
...
Записан
Rcus
Гость
« Ответ #8 : Февраль 09, 2009, 08:32 »

Множественное наследование от QObject не поддерживается. С другой стороны что мешает при определении своего конструктора использовать void QObject::setParent ( QObject * parent )
Записан
Gorin
Гость
« Ответ #9 : Февраль 10, 2009, 09:30 »

Посмотри http://qt-apps.org/content/show.php/QT_comport?content=95246, я там переопределяю класс и создаю в нем SLOT/SIGNAL. Все работает  Улыбающийся
Записан
igvek
Гость
« Ответ #10 : Февраль 15, 2009, 16:53 »

век живи - век учись (с) Улыбающийся

Таких глубоких познаний у меня увы нет... так что и думать об этом не мог, хотя и догадывался - что должен быть способ...
Спасибо за наводки, буду изучать.


С уважением, Игорь.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #11 : Февраль 15, 2009, 19:03 »

Взляни вот на это Serial Port в разделе Невизуальные компоненты
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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