Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从另一个类转换QString::toInt()时失败_C++_Qt_Qt5_Qtnetwork - Fatal编程技术网

C++ 从另一个类转换QString::toInt()时失败

C++ 从另一个类转换QString::toInt()时失败,c++,qt,qt5,qtnetwork,C++,Qt,Qt5,Qtnetwork,我想将QString从另一个类转换为int,但它可能会失败,因为结果是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); }

我想将
QString
从另一个类
转换为int
,但它可能会失败,因为结果是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
#ifndef小部件
#定义小部件
#包括
#包括
#包括
#包括
#包括
#包括
名称空间用户界面{
类控件;
}
类Widget:publicqwidget
{
Q_对象
公众:
显式小部件(QWidget*parent=0);
~Widget();
专用插槽:
单击按钮时无效();
私人:
Ui::Widget*Ui;
};
类MyClass:公共QObject
{
Q_对象
公众:
MyClass();
void fetch();
QString m_replyStr;
公众时段:
无效回复完成(QNetworkReply*);
私人:
QNetworkAccessManager*m_manager;
};
#endif//WIDGET\u H

您正在访问一个新初始化的实例
tmp
m\u replyStr
,该实例的
m\u replyStr
中没有设置任何内容。因此它具有默认的初始化值“empty string”

编辑

根据你的后续问题,也许你在寻找这样的东西

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);
}

您正在访问一个新初始化的实例
tmp
m\u replyStr
,该实例未在其
m\u replyStr
中设置任何内容。因此它具有默认的初始化值“empty string”

编辑

根据你的后续问题,也许你在寻找这样的东西

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);
}

你能告诉我如何在不创建新实例的情况下访问该类吗?@UlfricStorm这个问题毫无意义。类是一种类型,是其实例具有的一组属性(=数据和函数)。这就像问“如何在不创建整数变量的情况下访问
int
”,如果希望
Widget
表示
MyClass
实例的状态,请创建一个
MyClass
实例,并让
Widget
实例知道它。很可能是通过给
小部件
一个指向
MyClass
的类型(智能)指针的数据成员,并相应地填充它。@UlfricStorm我在答案中添加了一个示例。感谢您的解释,现在我做的事情更清楚了;)你能告诉我如何在不创建新实例的情况下访问该类吗?@UlfricStorm这个问题毫无意义。类是一种类型,是其实例具有的一组属性(=数据和函数)。这就像问“如何在不创建整数变量的情况下访问
int
”,如果希望
Widget
表示
MyClass
实例的状态,请创建一个
MyClass
实例,并让
Widget
实例知道它。很可能是通过给
小部件
一个指向
MyClass
的类型(智能)指针的数据成员,并相应地填充它。@UlfricStorm我在答案中添加了一个示例。感谢您的解释,现在我做的事情更清楚了;)