Russian Qt Forum

Qt => Общие вопросы => Тема начата: catprog от Июнь 30, 2009, 10:41



Название: События и свои классы
Отправлено: catprog от Июнь 30, 2009, 10:41
На сколько я понял, то чтобы использовать события и сигналы в своих классах нужно что бы эти классы наследовали QObject, я правильно понял?
А почему когда я объявляю класс наследником QObject то компилятор ругается на конструктор и деструктор наследника?
ЗЫ: это я не виджет делал, а класс без всяких графических штук.


Название: Re: События и свои классы
Отправлено: SimpleSunny от Июнь 30, 2009, 11:00
Код, на который ругается компилятор + версии оного и Qt :)


Название: Re: События и свои классы
Отправлено: lit-uriy от Июнь 30, 2009, 11:01
>>нужно что бы эти классы наследовали QObject, я правильно понял?
ага и ещё макрос Q_OBJECT не забудь.


Название: Re: События и свои классы
Отправлено: catprog от Июнь 30, 2009, 12:56
get_page.cpp
Код:
#include <QNetworkProxy>
#include <QHttp>
#include "get_page.h"

Get_page::Get_page()
{
    my_http = new QHttp;
/*
    QObject::connect( my_http,
                      SIGNAL( requestFinished(int,bool) ),
                      this,
                      SLOT( dataDone(int, bool) ) );
*/
}

Get_page::~Get_page()
{
    delete(my_http);
}

bool Get_page::request_some_page()
{
    //my_http->setHost("yandex.ru",80);
    //my_http->get("/");

    return true;
}

void Get_page::dataDone(int, bool)
{
    //QString tmp_data;
    //tmp_data = my_http->readAll();
    //my_data->setText(tmp_data);
}

get_page.h
Код:
#ifndef GET_PAGE_H
#define GET_PAGE_H

#include <QtGui>
#include <QtCore>

class Get_page //: QObject
{
//Q_OBJECT
public:
    Get_page();
    ~Get_page();
    bool request_some_page();
    QHttp *my_http;

    QString str1;


public slots:
    void dataDone(int, bool);


};

#endif // GET_PAGE_H

если раскомментировать комментарии //: QObject
и //Q_OBJECT
то влетает пачка ошибок восновном на конструктор и деструктор
Код:
debug/mainwindow.o(.text+0x156): In function `ZN8Get_pageC2Ev':
D:/QT/job/socks/get_page.cpp:6: undefined reference to `vtable for Get_page'
debug/mainwindow.o(.text+0x2a4): In function `ZN8Get_pageC1Ev':
D:/QT/job/socks/get_page.cpp:6: undefined reference to `vtable for Get_page'
debug/mainwindow.o(.text+0x3d6): In function `ZN8Get_pageD2Ev':
D:/QT/job/socks/get_page.cpp:17: undefined reference to `vtable for Get_page'
debug/mainwindow.o(.text+0x4fa): In function `ZN8Get_pageD1Ev':
D:/QT/job/socks/get_page.cpp:17: undefined reference to `vtable for Get_page'
debug/mainwindow.o(.text+0x61e): In function `ZN8Get_pageD0Ev':
D:/QT/job/socks/get_page.cpp:17: undefined reference to `vtable for Get_page'
collect2: ld returned 1 exit status
mingw32-make.exe[1]: *** [debug\socks.exe] Error 1
C:\Qt\2009.02\mingw\bin\mingw32-make.exe: *** [debug] Error 2
Exited with code 2.
Error while building project socks
When executing build step 'Make'

что интересно если закомментировать назад, то проект перестает компилироваться и выдает, хотя нет уже компилится. Какието странности, компилятор бывает на одно и тоже выдает разные ошибки :-[


Название: Re: События и свои классы
Отправлено: oxotnik от Июнь 30, 2009, 14:03
в *pro файле:
QT += network


Название: Re: События и свои классы
Отправлено: catprog от Июнь 30, 2009, 14:15
в *pro файле:
QT += network
Там уже есть такое.


Название: Re: События и свои классы
Отправлено: Alex Custov от Июнь 30, 2009, 14:15
в .pro файле "HEADERS += get_page.h" есть?


Название: Re: События и свои классы
Отправлено: lit-uriy от Июнь 30, 2009, 14:16
>>Get_page::Get_page()
почему не иницализируешь базовый класс? Наверняка знаешь, что тебе это не надо?


Название: Re: События и свои классы
Отправлено: Авварон от Июнь 30, 2009, 18:24
перезапусти креатор и пересобери проект с 0


Название: Re: События и свои классы
Отправлено: catprog от Июль 03, 2009, 10:11
>>Get_page::Get_page()
почему не иницализируешь базовый класс? Наверняка знаешь, что тебе это не надо?
А что Вы имеете ввиду? Наверно незнаю как.


Название: Re: События и свои классы
Отправлено: BaltikS от Июль 03, 2009, 10:22
Попробуй раскоментить всё, а в конструктуре написать

Get_page::Get_page() : QObject()
{
   ...
}


Название: Re: События и свои классы
Отправлено: catprog от Июль 03, 2009, 11:17
Попробуй раскоментить всё, а в конструктуре написать

Get_page::Get_page() : QObject()
{
   ...
}

Спасибо, так действительно запускается. А что значит подобная запись?
Get_page::Get_page() : QObject()


Название: Re: События и свои классы
Отправлено: kuzulis от Июль 03, 2009, 11:23
Цитировать
Спасибо, так действительно запускается. А что значит подобная запись?
Get_page::Get_page() : QObject()
эт значит что первым инициализируется конструктор QObject(), а потом Get_page() (вроде :) )


Название: Re: События и свои классы
Отправлено: catprog от Июль 03, 2009, 11:51
Цитировать
Спасибо, так действительно запускается. А что значит подобная запись?
Get_page::Get_page() : QObject()
эт значит что первым инициализируется конструктор QObject(), а потом Get_page() (вроде :) )
Спасибо :-)