Qt - 从功能中获取响应

时间:2018-01-28 11:11:36

标签: c++ qt qt5

我有一个Qt应用程序需要向服务器发送请求并获得响应。 我有一个处理GUI的A类(MainWindow)和一个处理http请求的B类(Requester)。

当我从主函数调用Connector时 - 我得到了响应。但是当我尝试按下按钮时,我无法得到响应 - >连接触发器永远不会发出。

所以我用Wireshark嗅探我的网络并检测到当我按下按钮时请求发送并且我的计算机得到响应 - 但信号从不发出:(

class MainWidget : public QWidget {
    QLineEdit *url_input = new QLineEdit(this);
    QToolBar *tool_bar = new QToolBar;

public:
    MainWidget(QWidget *parent = 0);
    void setToolBar();
    void startRequest();
};

MainWidget::MainWidget(QWidget *parent) : QWidget(parent) {
    setToolBar();
    // SOME_CODE
}

void MainWidget::setToolBar() {
    QPixmap list_png("list.png");

    QAction *list = tool_bar->addAction(QIcon(list_png), "list");
    tool_bar->addSeparator();

    connect(list, &QAction::triggered, this, &MainWidget::startRequest);
}

void MainWidget::startRequest () {
    Request req; 
    req.Connector(); // **Here it's NOT working**
}

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    MainWidget widget;

    Request req;
    req.Connector(); // **Here is perfectly working**

    widget.setGeometry(700, 450, 500, 250);
    widget.setWindowTitle("App GUI");
    widget.show();

    return app.exec();
}

有人能告诉我为什么会这样吗? 我正在使用Qt-5.10.0 Thanx提前:))

1 个答案:

答案 0 :(得分:1)

变量仅在其上下文存在时才存在,如果Request中的main将永远存在,因为main在应用程序存在时存在,而不是Request的{​​{1}}仅在调用该函数时存在,并且最终将删除该对象,因此在此之后将没有对象发出它。一种可能的解决方案是创建一个startRequest()指针,因为您直接使用内存,但是您有责任稍后将其从内存中删除。

Request