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我在答案中添加了一个示例。感谢您的解释,现在我做的事情更清楚了;)