我有一个 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/