正在使用信号槽的qt类的调用方法
call method of a qt class that is using signal slot
我想调用一个使用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只有在main完全执行之后才会生成。如何调用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();
}
当然可以。您可以像其他方法一样,在具有信号和槽的对象上调用方法。你为什么不试试?您也可以像普通类方法一样调用槽(如果它们不是私有的)。
顺便说一句,你真的不应该像你的类一样命名你的对象
LinksysE3000 LinksysE3000;
正如你在语法高亮显示中看到的,它和每个人类读者一样困惑,根据我自己的经验,我可以告诉你,进行任何自动重命名或任何find&替换操作真的一团糟。
相关文章:
- 如何从其他类n个Qt C++调用QTimer?
- 在从Qt调用的Python脚本中导入OpenCV崩溃
- Qt 调用具有 1 个以上参数的 java 方法
- QDialog 继承类的 Qt 调用成员函数
- 从QT调用JavaScript函数,并未显示输出
- 如何从C++/Qt调用QtActivity中的非静态Java方法
- Qt:调用终端+脚本的QProcess
- 从Qt C++调用Fortran函数
- 从Qt调用C++函数(插槽不起作用)
- 从Qt C++调用Java函数
- 扩展 QWidget 上的 Qt/C++ 调用函数
- Qt 调用在发布模式下失败
- QT/c++调用父级方法的最佳方法
- 为什么我不能从基类插槽Qt调用虚函数
- Qt:调用QEventLoop::exec后死锁
- QT调用函数在不同的源代码
- Qt调用外部Python脚本
- Qt调用具有自定义QObject类型的qml函数
- Qt 5.2调用QTableWidget::update不会导致QTableWidget:paintEvent
- 只有当两个信号都发出时才调用Qt -调用槽