0
我想將QString
從另一個類toInt
轉換,但由於結果爲0而接口失敗,而應該是5,而其餘代碼工作。 因爲我是C/Qt新手,發現類有點混亂,所以我認爲我的類在做錯了。從另一個類轉換QString時,QString :: toInt()失敗
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
你能告訴我如何在不創建新實例的情況下訪問該類嗎? –
@UlfricStorm這個問題沒有道理。一個類是一個類型,它的實例有一組屬性(=數據和函數)。這就像問「如何在不創建整型變量的情況下訪問int」?如果你想要一個'Widget'來表示'MyClass'的一個實例的狀態,創建一個'MyClass'實例並讓'Widget'實例知道它。最有可能的方法是給Widget一個類型爲(My)的智能指針的數據成員並相應地填充它。 – Angew
@UlfricStorm我已經給答案添加了一個例子。 – Angew