C++ 从另一个类访问变量
我有两个类,C++ 从另一个类访问变量,c++,qt,qt5,C++,Qt,Qt5,我有两个类,MyClass和Widget。下面是MyClass类,我想从我的Widget类中获取str变量。这是怎么做到的 class MyClass : public QObject { Q_OBJECT public: MyClass(); void fetch(); public slots: void replyFinished(QNetworkReply*); private: QNetworkAccessManager* m_manag
MyClass
和Widget
。下面是MyClass
类,我想从我的Widget
类中获取str
变量。这是怎么做到的
class MyClass : public QObject
{
Q_OBJECT
public:
MyClass();
void fetch();
public slots:
void replyFinished(QNetworkReply*);
private:
QNetworkAccessManager* m_manager;
};
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://stackoverflow.com")));
}
void MyClass::replyFinished(QNetworkReply* pReply)
{
QByteArray data=pReply->readAll();
QString str(data);
//this str should be available in my widget class
}
编辑:下面是小部件的重要部分
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;
};
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
//here str should be accessed
}
如果希望函数中的
str
变量可用于类或其他函数,则有两种选择:
QString MyClass::replyFinished(...)
{
QString str(data);
return data;
}
案例2:声明一个类成员变量
class MyClass
{
public:
QString m_replyStr;
};
//...
void MyClass::replyFinished(...)
{
QByteArray data = pReply->readAll();
m_replyStr = data;
}
用一个你想做什么的例子来修改你的问题会很有帮助。你可以发出一个带有
str
作为参数的信号,并将其连接到小部件中的一个插槽。然后你可以用它做你想做的事。
这样,您将保留面向事件的设计,并且不需要控制str是否存在。只要它准备好了,插槽就可以处理它
class MyClass : public QObject
{
Q_OBJECT
public:
MyClass();
void fetch();
public slots:
void replyFinished(QNetworkReply*);
signals:
void strReplyReady(QString str);
private:
QNetworkAccessManager* m_manager;
};
...
void MyClass::replyFinished(QNetworkReply* pReply)
{
QByteArray data=pReply->readAll();
QString str(data);
emit strReplyRead(str);
}
你的小部件
class MyWidget : public QWidget
{
//public members
...
public slots:
void readReply(QString str);
}
void MyWidget::readReply(QString str){
//do what you want with str
}
在main.cpp中,您与QObject的静态成员进行连接
QObject::connect(myClassPointer,SIGNAL(strReplyReay(QString)) ,
myWidgetPointer,SLOT(readReply(QString)));
widget类在哪里?如果您想传递数据,您*可以让widget也连接到networkAccessManager或让MyClass发出信号让它接收。但是坦率地说,有很多方法可以给这只猫换肤,我添加了Widget类和str应该访问的位置