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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: События и свои классы  (Прочитано 6321 раз)
catprog
Гость
« : Июнь 30, 2009, 10:41 »

На сколько я понял, то чтобы использовать события и сигналы в своих классах нужно что бы эти классы наследовали QObject, я правильно понял?
А почему когда я объявляю класс наследником QObject то компилятор ругается на конструктор и деструктор наследника?
ЗЫ: это я не виджет делал, а класс без всяких графических штук.
Записан
SimpleSunny
Гость
« Ответ #1 : Июнь 30, 2009, 11:00 »

Код, на который ругается компилятор + версии оного и Qt Улыбающийся
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #2 : Июнь 30, 2009, 11:01 »

>>нужно что бы эти классы наследовали QObject, я правильно понял?
ага и ещё макрос Q_OBJECT не забудь.
Записан

Юра.
catprog
Гость
« Ответ #3 : Июнь 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'

что интересно если закомментировать назад, то проект перестает компилироваться и выдает, хотя нет уже компилится. Какието странности, компилятор бывает на одно и тоже выдает разные ошибки Обеспокоенный
Записан
oxotnik
Гость
« Ответ #4 : Июнь 30, 2009, 14:03 »

в *pro файле:
QT += network
Записан
catprog
Гость
« Ответ #5 : Июнь 30, 2009, 14:15 »

в *pro файле:
QT += network
Там уже есть такое.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #6 : Июнь 30, 2009, 14:15 »

в .pro файле "HEADERS += get_page.h" есть?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #7 : Июнь 30, 2009, 14:16 »

>>Get_page::Get_page()
почему не иницализируешь базовый класс? Наверняка знаешь, что тебе это не надо?
Записан

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

Сообщений: 3260


Просмотр профиля
« Ответ #8 : Июнь 30, 2009, 18:24 »

перезапусти креатор и пересобери проект с 0
Записан
catprog
Гость
« Ответ #9 : Июль 03, 2009, 10:11 »

>>Get_page::Get_page()
почему не иницализируешь базовый класс? Наверняка знаешь, что тебе это не надо?
А что Вы имеете ввиду? Наверно незнаю как.
Записан
BaltikS
Гость
« Ответ #10 : Июль 03, 2009, 10:22 »

Попробуй раскоментить всё, а в конструктуре написать

Get_page::Get_page() : QObject()
{
   ...
}
Записан
catprog
Гость
« Ответ #11 : Июль 03, 2009, 11:17 »

Попробуй раскоментить всё, а в конструктуре написать

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

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

Сообщений: 2812


Просмотр профиля
« Ответ #12 : Июль 03, 2009, 11:23 »

Цитировать
Спасибо, так действительно запускается. А что значит подобная запись?
Get_page::Get_page() : QObject()
эт значит что первым инициализируется конструктор QObject(), а потом Get_page() (вроде Улыбающийся )
Записан

ArchLinux x86_64 / Win10 64 bit
catprog
Гость
« Ответ #13 : Июль 03, 2009, 11:51 »

Цитировать
Спасибо, так действительно запускается. А что значит подобная запись?
Get_page::Get_page() : QObject()
эт значит что первым инициализируется конструктор QObject(), а потом Get_page() (вроде Улыбающийся )
Спасибо :-)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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