Qt - 从功能中获取响应

问题描述 投票:0回答:1

我有一个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在此先感谢:)

c++ qt qt5
1个回答
1
投票

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

void MainWidget::startRequest () {
    Request *req = new Request; 
    req->Connector(); 
}
© www.soinside.com 2019 - 2024. All rights reserved.