我想调用一个使用Qt Signal Slot机制的类的方法。 例如:
QJsonObject routerInfo;
class LinksysE3000 : public QObject{
Q_OBJECT
public:
LinksysE3000(){
view = new QWebView;
view->load(QUrl("http://admin:admin@192.168.1.1"));
connect(view, SIGNAL(loadFinished(bool)),this,SLOT(finishedLoading(bool)));
//view->show();
}
~LinksysE3000()
{
view->close();
}
QJsonObject getStatus_RouterDetails(QWebFrame*);
QJsonObject getAll();
public slots:
void finishedLoading(bool ok);
private:
QWebView *view;
};
void LinksysE3000::finishedLoading(bool ok)
{
mainFrame = view->page()->mainFrame();
routerInfo = getStatus_RouterDetails(mainFrame);
}
QJsonObject LinksysE3000::getAll()
{
return routerInfo;
}
#include "main.moc"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
LinksysE3000 LinksysE3000;
// LinksysE3000.getAll();
return app.exec();
}
这是我使用的代码。在这里,我加载了一个网页,并使用信号槽机制获取一些数据。
此处仅在完成主的执行后生成信号 loadFinished 。我怎样才能调用getAll()函数?
我想从main或任何其他实例化类 LinksysE3000 的类中调用 getAll()函数。可能吗?如果没有..是否有任何其他机制来加载网页并提取字段值..?
有人可以帮我解决这个问题......?
如果我使用此代码,我什么都得不到:
class LinksysE3000 : public QObject{
Q_OBJECT
public:
LinksysE3000(){
view = new QWebView;
view->load(QUrl("http://admin:admin@192.168.1.1"));
//connect(view, SIGNAL(loadFinished(bool)),this,SLOT(finishedLoading(bool)));
//view->show();
}
~LinksysE3000()
{
view->close();
}
QJsonObject getStatus_RouterDetails(QWebFrame*);
QJsonObject getAll();
QWebView *view;
QWebFrame *mainFrame;
QString clickedPage;
public slots:
void finishedLoading(bool ok);
private:
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
LinksysE3000 linksysE3000;
QThread::sleep(3);
QWebFrame *frame = linksysE3000.view->page()->mainFrame();
qDebug()<<frame->toPlainText(); //This returns nothing
QJsonObject obj = linksysE3000.getStatus_RouterDetails(frame);
qDebug()<<obj; //This shulod return key value pairs, but retuns empty values means page not loaded
return app.exec();
}
答案 0 :(得分:0)
当然可以。您可以像使用其他方法一样调用带有信号和槽的对象上的方法。你为什么不试试呢? 您也可以像普通类方法一样调用插槽(如果它们不是私有的)。
顺便说一句,你真的不应该像你的班级一样命名你的对象
LinksysE3000 LinksysE3000;
正如您在语法突出显示中所看到的那样,它完全像每个人类读者一样困惑,根据我自己的经验,我可以告诉您,进行任何自动重命名或任何查找&amp;替换行动真的搞得一团糟。