所以我試圖在兩個類之間進行數據通信。 第一個類有一個發送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的值在「接收」函數中是正確的,但是如果我嘗試在另一個函數中顯示它,它將回到它的原始值。
我試圖在接收槽中實現一個功能來傳輸值,但它不起作用。
謝謝
你沒有改變'GLWidget :: reception(QString resolution)'中的'resolution'成員。所以,絕對會在其他功能中*回到原來的值。 – Mike
好吧,如果我的第一個評論不清楚,只需將'this-> resolution = resolution;'添加到'void GLWidget :: reception(QString resolution)'。這與Qt信號和插槽無關。 – Mike
請提供一個完整,簡潔的測試用例來重現問題。多個文件是不相關的 - 請將其全部最小化爲一個'main.cpp',並刪除不會改變行爲的所有內容。據推測,它甚至不必是一個GUI應用程序。 –