以下是我的示例代码:
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
派生的类(信号和插槽机制所必需的)。
有谁能告诉我如何解决这个问题?
答案 0 :(得分:51)
您可能没有公开地HttpFetch
,而是私下来自QObject
。所以只需改变
class HttpFetch : QObject { // ...
到
class HttpFetch : public QObject { // ...
它应该有效。
答案 1 :(得分:1)
如果你的设计要求继承非公开(我有这个要求,因为我为了多线程目的从QWidget
继承并且不想向用户公开所有函数),你可以做这样:
class FilesQueueQList : protected QWidget
{
Q_OBJECT
public:
using QWidget::QObject; //This is the solution!
//...
}
现在QWidget的成员是私有/受保护的,但QObject可以公开访问。
答案 2 :(得分:0)
您是否忘记了类HttpFetch中的Q_OBJECT宏?
我能看到你的班级HttpFetch吗?