24

这是我的示例代码:

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

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

4

3 回答 3

73

您可能不是HttpFetch公开的,而是私下从QObject. 所以只要改变

class HttpFetch : QObject { // ...

class HttpFetch : public QObject { // ...

它应该可以工作。

于 2013-06-07T08:50:02.380 回答
3

如果您的设计需要使继承不公开(我有这个要求是因为我从 a 继承QWidget了多线程目的并且不想向用户公开所有函数),您可以这样做:

class FilesQueueQList : protected QWidget
{
    Q_OBJECT

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

现在 QWidget 的成员是私有的/受保护的,但 QObject 可以作为公共访问。

于 2017-04-03T19:02:21.637 回答
0

您是否忘记了类 HttpFetch 中的 Q_OBJECT 宏?

我可以看看你的课 HttpFetch 吗?

于 2013-06-07T08:50:33.347 回答