Ответ 1
Вы, вероятно, не получили HttpFetch
публично, но конфиденциально от QObject
. Так что просто измените
class HttpFetch : QObject { // ...
to
class HttpFetch : public 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
(что необходимо для механизма сигнала и слота).
Может ли кто-нибудь сказать мне, как это исправить?
Вы, вероятно, не получили HttpFetch
публично, но конфиденциально от QObject
. Так что просто измените
class HttpFetch : QObject { // ...
to
class HttpFetch : public QObject { // ...
и он должен работать.
Если ваш дизайн требует сделать наследование непубличным (у меня было это требование, потому что я унаследовал от QWidget
для многопоточной задачи и не хотел показывать все функции пользователю), вы можете сделать это:
class FilesQueueQList : protected QWidget
{
Q_OBJECT
public:
using QWidget::QObject; //This is the solution!
//...
}
Теперь члены QWidget являются частными/защищенными, но QObject доступен как общедоступный.
Вы забыли макрос Q_OBJECT в своем классе HttpFetch?
Можно ли увидеть ваш класс HttpFetch?