在 QDialog 表单之间传递 QString 变量
Passing QString variables between QDialog forms
我遇到的问题有点棘手,与网上的其他问题/解决方案不同。为了简要介绍我的应用程序,工作流程如下所示;
我已经完成了,直到在 Dialog2 中获取数据并将数据保存在 QString
变量中。我想将其传回 Dialog1 ,它已经打开 。使用这些值,我将 setText
将值设置为 Dialog1 中的 QLabel
和 QLineEdit
小部件。
我使用的技术没有反映 Dialog1 上的变化。可能是因为它已经打开了,还没有更新。
相关代码片段如下所示 -
Dialog1.h
private slots:
void on_pushButton_2_clicked(); //this slot for pushbutton open Dialog2
public:
void setLabelText(QString str); //for setting the text of label
Dialog1.cpp
void Dialog1::on_pushButton_2_clicked()
{
Dialog2 dialog2;
dialog2.setModal(true);
dialog2.setWindowFlags(Qt::FramelessWindowHint);
dialog2.exec();
}
void Dialog1::setLabelText(QString str)
{
ui->lineEdit->setText(str);
qDebug()<<"Value Arrived "<<str;
}
Dialog2.h
public slots:
void saveSettings(); //slot for button press at dialog2, this will set the values at dialog1 and close the dialog2
Dialog2.cpp
void Dialog2::saveSettings()
{
Dialog1 dialog1;
dialog1.setLabelText(Vehicle_Name); //Vehicle_Name is QString variable
qDebug()<<"Sent Value "<<Vehicle_Name;
accept();
}
QString 在 QDialog 表单之间正确传递 类。我已经使用 qDebug() 消息来验证这一点。
如何保证变量的值反映在Dialog1上???任何人都可以参考我的代码指导我吗???
Dialog2
需要知道打开它的 Dialog1
的 实例 ,因此它可以将字符串传回这个特定实例:
class Dialog1;
class Dialog2 : public QDialog
{
public:
Dialog2(Dialog1* parent) : QDialog(parent), parent(parent) {}
public slots:
void saveSettings()
{
parent->setLabelText("hello")
}
private:
Dialog1* parent;
};
Dialog2 应该简单地提供一个信号,其中包含您要传输到 Dialog1 的数据,只要 Dialog2 完成其操作就会发出该信号:
Dialog1.cpp
void Dialog1::on_pushButton_2_clicked()
{
Dialog2 dialog2;
dialog2.setModal(true);
dialog2.setWindowFlags(Qt::FramelessWindowHint);
connect(&dialog2, &Dialog2::dataFetched, this, &Dialog1::updateData);
// or Qt4 connect syntax
// connect(&dialog2, SIGNAL(dataFetched(const QString&)), this, SLOT(updateData(const QString&));
// or directly connect to the label
// connect(&dialog2, &Dialog2::dataFetched, ui->lineEdit, &QLineEdit::setText);
dialog2.exec();
}
void Dialog1::updateData(const QString& data)
{
ui->lineEdit->setText(data);
}
Dialog2.h
public slots:
void saveSettings(); //slot for button press at dialog2, this will set the values at dialog1 and close the dialog2
signals:
void dataFetched(const QString& data);
Dialog2.cpp
void Dialog2::saveSettings()
{
// do whatever to generate the data
emit dataFetched(Vehicle_Name);
accept();
}
我遇到的问题有点棘手,与网上的其他问题/解决方案不同。为了简要介绍我的应用程序,工作流程如下所示;
我已经完成了,直到在 Dialog2 中获取数据并将数据保存在 QString
变量中。我想将其传回 Dialog1 ,它已经打开 。使用这些值,我将 setText
将值设置为 Dialog1 中的 QLabel
和 QLineEdit
小部件。
我使用的技术没有反映 Dialog1 上的变化。可能是因为它已经打开了,还没有更新。
相关代码片段如下所示 -
Dialog1.h
private slots:
void on_pushButton_2_clicked(); //this slot for pushbutton open Dialog2
public:
void setLabelText(QString str); //for setting the text of label
Dialog1.cpp
void Dialog1::on_pushButton_2_clicked()
{
Dialog2 dialog2;
dialog2.setModal(true);
dialog2.setWindowFlags(Qt::FramelessWindowHint);
dialog2.exec();
}
void Dialog1::setLabelText(QString str)
{
ui->lineEdit->setText(str);
qDebug()<<"Value Arrived "<<str;
}
Dialog2.h
public slots:
void saveSettings(); //slot for button press at dialog2, this will set the values at dialog1 and close the dialog2
Dialog2.cpp
void Dialog2::saveSettings()
{
Dialog1 dialog1;
dialog1.setLabelText(Vehicle_Name); //Vehicle_Name is QString variable
qDebug()<<"Sent Value "<<Vehicle_Name;
accept();
}
QString 在 QDialog 表单之间正确传递 类。我已经使用 qDebug() 消息来验证这一点。
如何保证变量的值反映在Dialog1上???任何人都可以参考我的代码指导我吗???
Dialog2
需要知道打开它的 Dialog1
的 实例 ,因此它可以将字符串传回这个特定实例:
class Dialog1;
class Dialog2 : public QDialog
{
public:
Dialog2(Dialog1* parent) : QDialog(parent), parent(parent) {}
public slots:
void saveSettings()
{
parent->setLabelText("hello")
}
private:
Dialog1* parent;
};
Dialog2 应该简单地提供一个信号,其中包含您要传输到 Dialog1 的数据,只要 Dialog2 完成其操作就会发出该信号:
Dialog1.cpp
void Dialog1::on_pushButton_2_clicked()
{
Dialog2 dialog2;
dialog2.setModal(true);
dialog2.setWindowFlags(Qt::FramelessWindowHint);
connect(&dialog2, &Dialog2::dataFetched, this, &Dialog1::updateData);
// or Qt4 connect syntax
// connect(&dialog2, SIGNAL(dataFetched(const QString&)), this, SLOT(updateData(const QString&));
// or directly connect to the label
// connect(&dialog2, &Dialog2::dataFetched, ui->lineEdit, &QLineEdit::setText);
dialog2.exec();
}
void Dialog1::updateData(const QString& data)
{
ui->lineEdit->setText(data);
}
Dialog2.h
public slots:
void saveSettings(); //slot for button press at dialog2, this will set the values at dialog1 and close the dialog2
signals:
void dataFetched(const QString& data);
Dialog2.cpp
void Dialog2::saveSettings()
{
// do whatever to generate the data
emit dataFetched(Vehicle_Name);
accept();
}