2016-07-06 24 views
-1

所以我試圖在兩個類之間進行數據通信。 第一個類有一個發送QString的Signal,第二個類有接收QString的Slot。問題是,接收QString的類不保留它。我可以在插槽中顯示它,但不能在課堂上的其他地方顯示。這裏是我的代碼:信號/插槽傳輸後無法保留數據

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 

} 

我沒有明顯寫所有的代碼,我只讓有趣的部分。

所以zoomWindow的值在「接收」函數中是正確的,但是如果我嘗試在另一個函數中顯示它,它將回到它的原始值。

我試圖在接收槽中實現一個功能來傳輸值,但它不起作用。

謝謝

+1

你沒有改變'GLWidget :: reception(QString resolution)'中的'resolution'成員。所以,絕對會在其他功能中*回到原來的值。 – Mike

+2

好吧,如果我的第一個評論不清楚,只需將'this-> resolution = resolution;'添加到'void GLWidget :: reception(QString resolution)'。這與Qt信號和插槽無關。 – Mike

+0

請提供一個完整,簡潔的測試用例來重現問題。多個文件是不相關的 - 請將其全部最小化爲一個'main.cpp',並刪除不會改變行爲的所有內容。據推測,它甚至不必是一個GUI應用程序。 –

回答

0

我無法重現您的問題。也許問題出在你沒有分享的代碼中。但避免使用該類的成員具有相同名稱的參數。閱讀困惑。

0

您是否以編程方式或使用表單編輯器將GLWidget添加到主窗口?我有一個類似的代碼,我使用窗體編輯器添加GLWidget,並從主窗口訪問GLWidget我必須使用ui-> glwidget-> ... .so所以也許你有2個GLWidget對象。我沒有在主窗口類上創建任何GLWidget變量。