QObject中无法访问的转换

Bha*_*hai 15 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;
};
Run Code Online (Sandbox Code Playgroud)

当我尝试编译它时,弹出以下错误

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

这个错误来自于派生类QObject(信号和插槽机制所必需的).

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

Ral*_*zky 54

你可能没有HttpFetch公开,但私下来QObject.所以只需改变

class HttpFetch : QObject { // ...
Run Code Online (Sandbox Code Playgroud)

class HttpFetch : public QObject { // ...
Run Code Online (Sandbox Code Playgroud)

它应该工作.


The*_*ist 5

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

class FilesQueueQList : protected QWidget
{
    Q_OBJECT

public:
    using QWidget::QObject; //This is the solution!
//...
}
Run Code Online (Sandbox Code Playgroud)

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