这是我的示例代码:
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)
它应该工作.
如果您的设计需要使继承成为非公共的(我有此要求,因为我QWidget出于多线程目的从 a 继承并且不想向用户公开所有函数),您可以这样做:
class FilesQueueQList : protected QWidget
{
Q_OBJECT
public:
using QWidget::QObject; //This is the solution!
//...
}
Run Code Online (Sandbox Code Playgroud)
现在 QWidget 的成员是私有/受保护的,但 QObject 可以作为公共访问。