在 QDialog 表单之间传递 QString 变量

Passing QString variables between QDialog forms

我遇到的问题有点棘手,与网上的其他问题/解决方案不同。为了简要介绍我的应用程序,工作流程如下所示;

我已经完成了,直到在 Dialog2 中获取数据并将数据保存在 QString 变量中。我想将其传回 Dialog1 ,它已经打开 。使用这些值,我将 setText 将值设置为 Dialog1 中的 QLabelQLineEdit 小部件。

我使用的技术没有反映 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();
}