Недопустимое преобразование в QObject

Вот мой пример кода:

class hoho : public QObject
{
    Q_OBJECT
public:
    hoho() 
    {
        httpFetch = new HttpFetch(QUrl("http://www.google.com/"));
        connect(httpFetch, SIGNAL(Fetched()), this, SLOT(PrintData(QByteArray)));
    }

    void PrintData(QByteArray http)
    {
        qDebug()<<http;
    }

    HttpFetch *httpFetch;
};

Когда я пытаюсь скомпилировать это, появляется следующая ошибка

1>main.cpp(15): error C2243: 'type cast' : conversion from 'HttpFetch *' to 'const QObject *' exists, but is inaccessible

Эта ошибка возникает, когда класс получен из QObject (что необходимо для механизма сигнала и слота).

Может ли кто-нибудь сказать мне, как это исправить?

Ответ 1

Вы, вероятно, не получили HttpFetch публично, но конфиденциально от QObject. Так что просто измените

class HttpFetch : QObject { // ...

to

class HttpFetch : public QObject { // ...

и он должен работать.

Ответ 2

Если ваш дизайн требует сделать наследование непубличным (у меня было это требование, потому что я унаследовал от QWidget для многопоточной задачи и не хотел показывать все функции пользователю), вы можете сделать это:

class FilesQueueQList : protected QWidget
{
    Q_OBJECT

public:
    using QWidget::QObject; //This is the solution!
//...
}

Теперь члены QWidget являются частными/защищенными, но QObject доступен как общедоступный.

Ответ 3

Вы забыли макрос Q_OBJECT в своем классе HttpFetch?

Можно ли увидеть ваш класс HttpFetch?