0

QString別のクラスからa を変換したいのですがtoInt、結果が 0 であるのに 5 である必要があり、残りのコードが機能するため、うまくいきません。私は C/Qt に不慣れで、クラスが少しわかりにくいので、クラスで何か間違ったことをしたと思います。

ウィジェット.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;
}

ウィジェット.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
4

1 に答える 1

4

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);
}
于 2013-06-20T17:10:41.430 に答える