c++ - Qt - 从函数中获取响应

标签 c++ qt qt5

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

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

所以我用 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 提前致谢:)

最佳答案

变量只有在其上下文存在时才存在,对于 main 中的 Request 来说,它将永远存在,因为 main 在应用程序存在时存在,而不是 startRequest()Request 仅在调用该函数时存在,最后该对象将被消除,所以在那之后将没有发出它的对象。一种可能的解决方案是创建一个 Request 指针,因为您直接使用内存,但您有责任稍后将其从内存中删除。

void MainWidget::startRequest () {
    Request *req = new Request; 
    req->Connector(); 
}

关于c++ - Qt - 从函数中获取响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48485688/

相关文章:

c# - SWIG 中的命名空间常量

python - 如何在 PyQt 中编写图像按钮?

c++ - Qt - 当另一个对话框关闭时如何做我想做的事?

c# - 根据程序内存查找新地址

c++ - 由于模板基类,从不完整类型初始化静态 constexpr

C++默认复制和赋值运算符

c++ - QThread::wait() 不使用直接连接不返回

c++ - QNetworkAccessManager的createRequest方法中的中断请求

c++ - Qt Creator - 如何启用 float IDE 布局?

c++ - 如何计算 QString Qt 中的特定字符