正在使用信号槽的qt类的调用方法

call method of a qt class that is using signal slot

本文关键字:qt 调用 方法 信号      更新时间:2023-10-16

我想调用一个使用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&替换操作真的一团糟。