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
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
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
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. –