Название: Вопрос по MOC компиляции Отправлено: Mark_T от Октябрь 21, 2010, 18:44 Доброго всем времени суток! Я новичок в программировании, пишу проект который нужно будет сдать в задокументированном виде. Вопрос у меня следующий: про создании класса, к примеру Myclass, и определении в нем слотов и сигналов ( при включении макроса Q_OBJECT) и определении при этом методов класса не в заголовочном файле, а в myclass.cpp компилятор ругается, что этот метод уже был определен в moc_myclass.cpp. Приходится определять метод в самом заголовочном файле, а в случае создания сигнала лезть в moc_myclass.cpp комментить метод и перетаскивать директивы (не знаю как называются точно) в тело определения сигнала. Это конечно все работает, но уж очень некрасиво получается. Может достаточно прописать строчку в одном из файлов и проблема решиться. К примитивности изложения прошу не относиться строго. С проблемой бы разобрался, но через неделю сдавать листинги. Заранее спасибо...
Название: Re: Вопрос по MOC компиляции Отправлено: Авварон от Октябрь 21, 2010, 18:52 А зачем переопределять сигнал??
Название: Re: Вопрос по MOC компиляции Отправлено: kibsoft от Октябрь 21, 2010, 19:59 Я ничего не понял ;D Зачем куда-то лезть, что-то переносить?
Вот пример класса: .h файл Код: class MyClass : public QObject .cpp файл Код: void MyClass::myMethod() Название: Re: Вопрос по MOC компиляции Отправлено: Mark_T от Октябрь 21, 2010, 20:30 К примеру есть класс с файлом udpclientserver.h
class Udpclientserver: public QObject { Q_OBJECT public: Udpclientserver(QObject *parent = 0) : QObject(parent) { } public slots: void processDatagrams() { //реализация } signals : void returndata () ; }; теперь есть файл udpclientserver.cpp void Udpclientserver::returndata() { // реализация } компилятор ( GNU) ругается, что функция returndata() уже определена в moc файле. За оформление прошу прощение ). В плане писать в форумы, я тоже новичок ( Название: Re: Вопрос по MOC компиляции Отправлено: MoPDoBoPoT от Октябрь 21, 2010, 21:02 :o
Тут явное непонимание принципов Qt. Надо книжку какую-нибудь по Qt прочитать. Название: Re: Вопрос по MOC компиляции Отправлено: BlackTass от Октябрь 21, 2010, 21:24 Если перевести сообщения Павлика на общечеловеческий, то не надо писать тело сигнала. Правда очень интересно что же там можно написать? сигнал это по сути не метод, а некий маркер, служащий для абстракции онли.
Название: Re: Вопрос по MOC компиляции Отправлено: Mark_T от Октябрь 21, 2010, 21:52 Вопрос, может быть, еще более глупый. Если есть несколько объектов одного класса, у которого есть сигнал, и есть объект другого класса, у которого есть слот. Я хочу передать с помощью этого сигнала параметры этому объекту со слотом. если нет реализации то как это сделать? По старинке у меня получалось, вроде
Название: Re: Вопрос по MOC компиляции Отправлено: BlackTass от Октябрь 21, 2010, 22:06 мммм, а можно все таки посмотреть что там в реализации сигнала у вас? уже стало очень интересно
Название: Re: Вопрос по MOC компиляции Отправлено: Mark_T от Октябрь 22, 2010, 07:19 Так, опишу тогда проблему, как есть. У меня есть класс (хотя и раньше при создании других классов я сталкивался с этой проблемой)
Код: class Udpclientserver: public QObject слоты кстати также приходится определять в заголовочном файле иначе так же ругается что эта функция (слот) уже определена в файле moc_udpclientserver.cpp. Но со слотами ладно, их как я понял можно и определать при объявлении, а вот сигнал приходится описывать в udpclientserver.cpp так Код: #include "udpclientserver.h" то есть тут сигнал у меня служит и как маркер и как буфер для передачи данных между объектами. При компиляции (GNU make) выводится такое сообщение Код:
Делаю следующее: открываю файл moc_udpclientserver.cpp и комментирую в нем Код:
копирую этот код в udpclientserver.cpp , чтобы было так : Код: QString Udpclientserver::returndata(QString _t1) { все работает. Проблема, конечно, решается таким способом, но как-то стыдно такое дело показывать ((. Название: Re: Вопрос по MOC компиляции Отправлено: BlackTass от Октябрь 22, 2010, 09:37 Во-первых, сделайте сигналу возвращаемый тип void
Во-вторых, уберите тело сигнала совсем. Оставьте только строку void returndata(QString a); В-третьих, почитайте уже ассистант на тему сигнал-слотов Название: Re: Вопрос по MOC компиляции Отправлено: Mark_T от Октябрь 22, 2010, 12:06 Спасибо, вроде работает. Будем копать дальше
|