Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.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++ 从另一个类访问变量_C++_Qt_Qt5 - Fatal编程技术网

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
变量可用于类或其他函数,则有两种选择:

  • 从函数返回它
  • 在MyClass中声明一个变量以保存字符串并设置 变量的值 案例1:从函数返回

    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应该访问的位置