QString :: toInt () завершается ошибкой при преобразовании QString из другого класса

Я хочу преобразовать QString из другого класса toInt, но это кажется неудачным, потому что результат равен 0, в то время как он должен быть 5, а остальная часть кода работает.
Поскольку я новичок в C / Qt и нахожу классы немного запутанными, я думаю, что что-то не так с моими классами.

widget.cpp

#include "widget.h"#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
}

Widget::~Widget()
{
delete ui;
}

void Widget::on_pushButton_clicked()
{
MyClass tmp;
int myNumber = tmp.m_replyStr.toInt();
ui->lcdNumber->display(myNumber);
}

MyClass::MyClass()
{
m_manager = new QNetworkAccessManager(this);

connect( m_manager, SIGNAL(finished(QNetworkReply*)),
this, SLOT(replyFinished(QNetworkReply*)));
}

void MyClass::fetch()
{
m_manager->get(QNetworkRequest(QUrl("http://example.tld/test.html"))); // html contains only the number 5
}

void MyClass::replyFinished(QNetworkReply* pReply)
{
QByteArray data=pReply->readAll();
QString str(data);
m_replyStr = str;
}

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QObject>
#include <QNetworkAccessManager>
#include <QUrl>
#include <QNetworkRequest>
#include <QNetworkReply>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
Q_OBJECT

public:
explicit Widget(QWidget *parent = 0);
~Widget();

private slots:
void on_pushButton_clicked();

private:
Ui::Widget *ui;
};

class MyClass : public QObject
{
Q_OBJECT

public:
MyClass();
void fetch();
QString m_replyStr;

public slots:
void replyFinished(QNetworkReply*);

private:
QNetworkAccessManager* m_manager;
};

#endif // WIDGET_H

0

Решение

Вы получаете доступ m_replyStr недавно инициализированного экземпляра tmp, который ничего не устанавливает в его m_replyStr, Таким образом, оно имеет инициализированное по умолчанию значение «пустая строка».

РЕДАКТИРОВАТЬ

Основываясь на вашем последующем вопросе, возможно, вы искали что-то подобное?

class MyClass;

class Widget : public QWidget
{
Q_OBJECT

public:
Widget(MyClass &myClassInstance, QWidget *parent = 0);
~Widget();

private slots:
void on_pushButton_clicked();

private:
Ui::Widget *ui;
MyClass *myClass;
};

Widget::Widget(MyClass &myClassInstance, QWidget *parent = 0)
: QWidget(parent)
, ui(new Ui::Widget)
, myClass(&myClassInstance)
{
ui->setupUi(this);
}

void Widget::on_pushButton_clicked()
{
int myNumber = myClass->m_replyStr.toInt();
ui->lcdNumber->display(myNumber);
}
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]