2つのクラス間でデータをやり取りしようとしています。 最初のクラスにはQStringを送信するSignalがあり、2番目のクラスには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の値は正しいですが、別の機能で表示しようとすると元の値に戻ります。
値を転送するために受信スロットに機能を実装しようとしましたが、機能しません。
ありがとうございました
あなたは 'GLWidget :: reception(QString resolution)'で 'resolution'メンバを変更していません。したがって、絶対に、他の関数では元の値*に戻ります。 – Mike
私の最初のコメントが明確でない場合は、 'this => resolution = resolution;'を 'void GLWidget :: reception(QString resolution)'に追加するだけです。これはQt信号とスロットとは関係ありません。 – Mike
問題を再現する完全で簡潔なテストケースを提供してください。複数のファイルは無関係です。すべてを1つの 'main.cpp'ファイルに最小化し、動作を変更しないものはすべて削除してください。おそらく、GUIアプリケーションである必要はありません。 –