Название: Производный класс от QextSerialPort не работает :( Отправлено: igvek от Февраля 03, 2009, 22:20 Здравствуйте,
задумал я сделать классик на основе QextSerialPort, но такая проблема, нужно что бы он обрабатывал сигналы, следовательно я добавляю макрос Q_OBJECT, НО, после запуска программа сразу закрывается с ошибкой. Судя по всему, нужно передавать дальше конструкторам QextSerialPort родительский QObject, но у конструкторов QextSerialPort такого в параметрах нет, поискал в инете, кое что нашел - но не могу понять чего не хватает. Вот кратенько мой код: Головешка: Код: class SerialPort: public QextSerialPort Сишник: Код: SerialPort::SerialPort() В чем может быть дело? В QT-е я плохо секу, только начал изучать, так что сообразить в чем баг - не получается. Ну а если лень писать - то может у кого есть примерчик, мне бы хоть взглянуть, на .h .cpp файлы как правильно надо делать. С Уважением, Игорь. Название: Re: Производный класс от QextSerialPort не работает :( Отправлено: lit-uriy от Февраля 03, 2009, 22:28 Сделай обертку. т.е. создай наследника от QObject, а в нем переменную типа QextSerialPort, и ею пользуйся.
Название: Re: Производный класс от QextSerialPort не работает :( Отправлено: igvek от Февраля 03, 2009, 22:34 Сделай обертку. т.е. создай наследника от QObject, а в нем переменную типа QextSerialPort, и ею пользуйся. Нее, переменная не подходит, эту возможность я оставлю на крайний случай... Хотелось бы все-таки с наследованием класс сделать, и вроде у людей это получается, только вот не пойму как Название: Re: Производный класс от QextSerialPort не работает :( Отправлено: igvek от Февраля 03, 2009, 22:38 Дело в том, что без Q_OBJECT все работает и уже много чего написано под это, а теперь понадобились SIGNAL SLOT... Не хочется все переделывать, пока остается надежда, что можно не переделывать ;) ну вы меня понимаете ;)
Название: Re: Производный класс от QextSerialPort не работает :( Отправлено: igvek от Февраля 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, т.е. от разработчика, но вот версия не указана, нипанятна) Название: Re: Производный класс от QextSerialPort не работает :( Отправлено: igvek от Февраля 04, 2009, 01:27 походу нашел, на офф сайте в cvs есть как раз та версия, с parent`ами, которых мне так и не хватало...
Версия называется q4extserialport. Всем спасибо за помощь :) удачи! Название: Re: Производный класс от QextSerialPort не работает :( Отправлено: igvek от Февраля 07, 2009, 17:49 Если кому интересно:
поковырялся я с этими версиями и выяснил следующее: 1. у релиза QextSerialPort (1.2win-alpha) нет возможности передавать в конструктор parent, что не позволяет использовать его для наследования в своих классах. 2. у cvs версии q4extserialport есть возможность передавать parent родителя в конструктор, НО, нет отдельного потока ожидания данных, т.е. нет сигнала readyRead (и других сигналов), т.е. q4extserialport не работает в режиме OVERLAPPED, что иногда не удобно. Возможно в новой версии они добавят таки эту полезную штуку, но пока нет. Увы, для моей задачи нужно было и передавать родителя конструктору, и использовать режим OVERLAPPED при открытии COM-порта. Чиста для себя сделал слепку. соединив эти две ветки, старался вносить как можно меньше изменений, в результате код выглядит почти так же как в qextserialport и q4extserialport. Если кому интересно, могу поделиться исходниками (хотя слепить - дело не хитрое, и делается довольно быстро). PS: все выше написанное - относится только для компиляции под Windows. С Уважением, Игорь. Название: Re: Производный класс от QextSerialPort не работает :( Отправлено: kirill от Февраля 09, 2009, 07:20 а если сделать множественное наследование?
class SerialPort: public QextSerialPort, public QObject { Q_OBJECT ... Название: Re: Производный класс от QextSerialPort не работает :( Отправлено: Rcus от Февраля 09, 2009, 08:32 Множественное наследование от QObject не поддерживается. С другой стороны что мешает при определении своего конструктора использовать void QObject::setParent ( QObject * parent )
Название: Re: Производный класс от QextSerialPort не работает :( Отправлено: Gorin от Февраля 10, 2009, 09:30 Посмотри http://qt-apps.org/content/show.php/QT_comport?content=95246, я там переопределяю класс и создаю в нем SLOT/SIGNAL. Все работает :)
Название: Re: Производный класс от QextSerialPort не работает :( Отправлено: igvek от Февраля 15, 2009, 16:53 век живи - век учись (с) :)
Таких глубоких познаний у меня увы нет... так что и думать об этом не мог, хотя и догадывался - что должен быть способ... Спасибо за наводки, буду изучать. С уважением, Игорь. Название: Re: Производный класс от QextSerialPort не работает :( Отправлено: pastor от Февраля 15, 2009, 19:03 Взляни вот на это Serial Port (http://www.ii-system.com/soft/devzone/devzone.htm) в разделе Невизуальные компоненты
|