2016-07-06 8 views
-1

nicht beibehalten, also versuche ich Daten zwischen zwei Klassen zu kommunizieren. Die erste Klasse hat ein Signal, das einen QString sendet, die zweite Klasse hat den Slot, der den QString empfängt. Das Problem ist, dass die Klasse, die den QString empfängt, sie nicht speichert. Ich kann es im Slot anzeigen, aber nicht an anderer Stelle in der Klasse. Hier ist mein Code:Kann Daten nach einer Signal/Slot-Übertragung

class1.h (Sender)

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 (Receiver)

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 

} 

ich nicht schreiben, den gesamten Code offensichtlich, ich die interessanten Teile nur lassen.

Also der Wert von ZoomWindow ist korrekt in der "Empfangs" -Funktion, aber wenn ich versuche, es in einer anderen Funktion anzuzeigen, wird es wieder auf seinen ursprünglichen Wert.

Ich habe versucht, eine Funktion im Empfangs-Slot zu implementieren, um den Wert zu übertragen, aber es funktioniert nicht.

Dank

+1

Sie haben 'resolution' Mitglied in Ihrem 'GLWidget :: reception (QString resolution)' nicht geändert. Also wird es in anderen Funktionen absolut wieder auf seinen ursprünglichen Wert * gebracht. – Mike

+2

nun, falls mein erster Kommentar nicht klar war, füge einfach this-> resolution = resolution; 'hinzu, um GLWidget :: reception (QString resolution) zu löschen'. Dies hat nichts mit Qt-Signalen und Slots zu tun. – Mike

+0

Bitte geben Sie einen vollständigen, präzisen Testfall an, der das Problem reproduziert. Die mehreren Dateien sind irrelevant - bitte minimieren Sie alles in einer einzigen 'main.cpp' und entfernen Sie alles, was das Verhalten nicht ändert. Es muss vermutlich nicht einmal eine GUI-Anwendung sein. –

Antwort

0

Ich konnte Ihr Problem nicht reproduzieren. Möglicherweise liegt das Problem in einem Teil des Codes, den Sie nicht geteilt haben. Vermeiden Sie jedoch die Verwendung des gleichnamigen Parameters eines Members der Klasse. Das Lesen ist verwirrt.

0

Haben Sie das GLWidget programmatisch oder über den Formulareditor zum Hauptfenster hinzugefügt?

Ich habe einen ähnlichen Code, ich habe das GLWidget mit dem Formulareditor hinzugefügt, und um auf das GLWidget vom Hauptfenster aus zugreifen zu können, muss ich ui-> glwidget-> ... verwenden. Vielleicht hast du 2 GLWidget-Objekte . Ich habe keine GLWidget-Variable, die in der Hauptfensterklasse erstellt wurde.

Verwandte Themen