Название: Не меняется глобальная переменная в функции.
Отправлено: Arthas от Август 14, 2021, 06:29
Здравствуйте! Суть проблемы: Есть переменная id_dev. Получаю ответ с сервера через api через get_responses(), и в функции rez_player(QNetworkReply *reply) пытаюсь присвоить id_dev новое значение. Внутри функции переменная меняется, но глобально нет. это видно на 18 строчке, когда я пытаюсь вывести эту переменную я получаю изначальное значение, а не то, что нужно. Вот и вопрос, как мне присвоить ей значение в той функции? .cpp #include "gm.h" #include "ui_gm.h" ////// VAR ///// QString nick_dev = "123"; QString id_last_match; QString id_dev; QString token = "*******************************"; ////// VAR ///// GM::GM(QWidget *parent): QMainWindow(parent), ui(new Ui::GM) { ui->setupUi(this); this->setWindowFlags(Qt::FramelessWindowHint); m_title = new KcWdTitlebar(this); ui->Lay->addWidget(m_title); this->setWindowIcon(QIcon(QPixmap((":/resource/img/logo.png")))); get_responses(); qDebug()<<id_dev; } GM::~GM(){delete ui;}
void GM::get_responses() { get_player = new QNetworkAccessManager(); connect(get_player, SIGNAL(finished(QNetworkReply*)), this, SLOT(rez_player(QNetworkReply*))); get_player->get(QNetworkRequest(QUrl("https://api.vimeworld.ru/user/name/" + nick_dev + "?token=" + token))); } void GM::rez_player(QNetworkReply *reply) { if(!reply->error()) { id_dev = QString::number(QJsonDocument::fromJson(reply->readAll()).array().at(0).toObject().value("id").toInt()); } else{} } .h #ifndef GM_H #define GM_H
#include <QMainWindow> #include "Bar.h" #include <QJsonDocument> #include <QJsonObject> #include <QJsonArray> #include <QNetworkRequest> #include <QNetworkReply> #include <QUrl> #include <QNetworkAccessManager>
QT_BEGIN_NAMESPACE namespace Ui { class GM; } QT_END_NAMESPACE
class GM : public QMainWindow { Q_OBJECT
public: GM(QWidget *parent = nullptr); ~GM();
private: QNetworkAccessManager *get_player; QNetworkAccessManager *get_id_last_match; KcWdTitlebar *m_title; Ui::GM *ui;
private slots: void get_responses(); void rez_player(QNetworkReply *reply); void rez_id_last_match(QNetworkReply *reply); }; #endif // GM_H .pro QT += core gui QT += network
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
# You can make your code fail to compile if it uses deprecated APIs. # In order to do so, uncomment the following line. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \ Bar.cpp \ main.cpp \ gm.cpp
HEADERS += \ Bar.h \ gm.h
FORMS += \ gm.ui
# Default rules for deployment. qnx: target.path = /tmp/$${TARGET}/bin else: unix:!android: target.path = /opt/$${TARGET}/bin !isEmpty(target.path): INSTALLS += target
RESOURCES += \ resource.qrc
Название: Re: Не меняется глобальная переменная в функции.
Отправлено: Igors от Август 14, 2021, 10:45
Допустим это кого-то заинтересовало, что он должен делать? Выцарапывать тексты с форума copy/paste? Прилагайте компилябельный проект в zip если такая возможность есть.
Также бросается в глаза: ну поставить точку останова на строке присваивания, возможно условный останов по изменению переменной. Такие действия выполняются каждый день. Или Вы отладчиком не пользуетесь ???
Название: Re: Не меняется глобальная переменная в функции.
Отправлено: kambala от Август 14, 2021, 11:40
QNetworkAccessManager работает асинхронно, вот и весь ответ. твоя qDebug строчка выполняется до совершения запроса. правильное значение будет после отработки функции rez_player (и то если ошибка не пришла).
Название: Re: Не меняется глобальная переменная в функции.
Отправлено: Igors от Август 17, 2021, 10:30
QNetworkAccessManager работает асинхронно, вот и весь ответ.
95% что Вы "попали", но мне не нравится сам метод :) Зачем гадать если можно просто посмотреть в отладчике?
|