在信号/插槽传输后无法保留数据

时间:2016-07-06 14:23:29

标签: c++ qt

所以我试图在两个类之间传递数据。 第一个类有一个发送QString的信号,第二个类有一个接收QString的Slot。问题是,接收QString的类没有保留它。我可以在Slot中显示它,但不能在课堂的其他地方显示。这是我的代码:

class1.h(发件人)

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

signals:
    void message(QString resolution);

private:

    GLWidget *widget;

    QString resolution;

};

#endif // MAINWINDOW_H

class2.h(接收方)

class GLWidget : public QGLWidget
{
    Q_OBJECT
public:
    explicit GLWidget(QWidget *parent = 0);

//
...
//
    float zoomWindow;

    QString resolution;


public slots:

    void reception(QString resolution);

};

class1.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    resolution = "";

    widget = new GLWidget(NULL);
    connect(this, SIGNAL(message(QString)), widget, SLOT(reception(QString)));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_radioButton_clicked()
{
    resolution="0.2";
    emit message(resolution);
}

void MainWindow::on_radioButton_3_clicked()
{
    resolution="0.3";
    emit message(resolution);
}

void MainWindow::on_radioButton_2_clicked()
{
    resolution="0.5";
    emit message(resolution);
}

class2.cpp

GLWidget::GLWidget(QWidget *parent) :
        QGLWidget(parent)
{
    zoomWindow=0.5;
}

void GLWidget::reception(QString resolution){

   qDebug()<<resolution;               //DISPLAY CORRECTLY

   zoomWindow = resolution.toFloat(); //TRYING TO STOCK THE VALUE OF RESOLUTION                                                .                                       IN ZOOMWINDOW

   qDebug()<<zoomWindow;              //DISPLAY CORRECTLY

}

我显然没有编写所有代码,我只是让有趣的部分。

因此,&#34;接收&#34;中zoomWindow的值是正确的。功能,但如果我尝试在另一个功能中显示它,它将恢复到原始值。

我试图在接收插槽中实现一个功能来传输值,但它不起作用。

由于

2 个答案:

答案 0 :(得分:0)

我无法重现你的问题。也许问题出在您未共享的代码的一部分中。但请避免使用与该类成员同名的参数。阅读很困惑。

答案 1 :(得分:0)

您是否以编程方式或使用表单编辑器将GLWidget添加到主窗口?

我有类似的代码,我使用表单编辑器添加了GLWidget,并且从主窗口访问GLWidget我必须使用ui-&gt; glwidget-&gt; ...也许你有2个GLWidget对象。我没有在主窗口类上创建任何GLWidget变量。