QObject中无法访问的转换

时间:2013-06-07 08:37:39

标签: c++ qt

以下是我的示例代码:

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派生的类(信号和插槽机制所必需的)。

有谁能告诉我如何解决这个问题?

3 个答案:

答案 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吗?