如何通过在第三个窗口中按一个按钮将QString从一个窗口获取到另一个窗口

时间:2018-10-28 20:21:54

标签: c++ qt getter-setter qlineedit

C ++和Qt作为研究项目(生物学)的一部分是新手,并且一直在努力寻找一些非常简单的东西。我真的很感谢某人的帮助。

我正在使用一个预先存在的程序的GUI,并且试图将QString变量从一个窗口(输入窗体)的QLineEdit传递到第二个窗口(输出窗体)的QLineEdit。

当我单击第三个窗口中的一个按钮(文件对话框)时,我遇到的问题是我需要输出表单,并预先填充了LineEdit。

问题:

  • 启动->出现两个窗口:filedialog和inputform。
  • 用户将数据输入到inputform的QLineEdit
  • 用户在文件对话框窗口上按下“ transferButton”
  • 按下按钮->出现outputform,其中QLineEdit预先填充了用户的数据(来自inputform)。

我认为问题出在getter / setter变量上,并且我的变量可能超出范围,但是我尝试了许多类似的示例,但无法使其正常工作。

先谢谢了。

这是我的代码:

Main.cpp

#include "filedialog.h"
#include "inputform.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    FileDialog w;
    InputForm w2;
    w.show();
    w2.show();


    return a.exec();
}

filedialog.h

#ifndef FILEDIALOG_H
#define FILEDIALOG_H

#include <QDialog>

namespace Ui {
class FileDialog;
}

class FileDialog : public QDialog
{
    Q_OBJECT

public:
    explicit FileDialog(QWidget *parent = nullptr);
    ~FileDialog();
    void setFileName();
    QString getFileName();

private slots:
    void on_transferButton_clicked();

private:
    Ui::FileDialog *ui;
    QString fileName;
};

#endif // FILEDIALOG_H

filedialog.ccp

#include "filedialog.h"
#include "ui_filedialog.h"
#include "inputform.h"
#include "ui_inputform.h"
#include "outputform.h"
#include "ui_outputform.h"

FileDialog::FileDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::FileDialog)
{
    ui->setupUi(this);
}

FileDialog::~FileDialog()
{
    delete ui;
}

void FileDialog::setFileName()
{
    InputForm *inputform = new InputForm;
    fileName = inputform->ui->inputLineEdit->text();
}

QString FileDialog::getFileName()
{
    return fileName;
}

void FileDialog::on_transferButton_clicked()
{
    setFileName();
    OutPutForm *outputform = new OutPutForm;
    outputform->ui->outputLineEdit->setText(getFileName());
    outputform->show();
}

inputform.h

#ifndef INPUTFORM_H
#define INPUTFORM_H

#include <QWidget>

namespace Ui {
class InputForm;
}

class InputForm : public QWidget
{
    Q_OBJECT

public:
    explicit InputForm(QWidget *parent = nullptr);
    ~InputForm();
    Ui::InputForm *ui;

};

#endif // INPUTFORM_H

inputform.ccp

#include "inputform.h"
#include "ui_inputform.h"

InputForm::InputForm(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::InputForm)
{
    ui->setupUi(this);
}

InputForm::~InputForm()
{
    delete ui;
}

outputform.h

#ifndef OUTPUTFORM_H
#define OUTPUTFORM_H

#include <QWidget>

namespace Ui {
class OutPutForm;
}

class OutPutForm : public QWidget
{
    Q_OBJECT

public:
    explicit OutPutForm(QWidget *parent = nullptr);
    ~OutPutForm();
    Ui::OutPutForm *ui;

};

#endif // OUTPUTFORM_H

outputform.ccp

#include "outputform.h"
#include "ui_outputform.h"

OutPutForm::OutPutForm(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::OutPutForm)
{
    ui->setupUi(this);
}

OutPutForm::~OutPutForm()
{
    delete ui;
}

1 个答案:

答案 0 :(得分:0)

感谢您的简短指导。

玩了一段时间之后:

设置主窗口(或者在我的主对话框窗口中)。生成inputform实例,将按钮连接到inputform。

FileDialog::FileDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::FileDialog)
{
    ui->setupUi(this);

    InputForm *inputForm = new InputForm;
    connect(ui->transferButton,SIGNAL(clicked()),inputForm,SLOT(getLineEditTextFunc()));
    inputForm->show();
}

FileDialog::~FileDialog()
{
    delete ui;
}

void FileDialog::on_transferButton_clicked()
{

}

然后从输入表单中输入:

定义一个函数以获取输入表单的LineEdit文本(文件名);然后还生成一个输出表单,并使用fileName变量填充它的LineEdit。

InputForm::InputForm(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::InputForm)
{
    ui->setupUi(this);
}

InputForm::~InputForm()
{
    delete ui;
}

void InputForm::getLineEditTextFunc()
{
    fileName = this->ui->inputLineEdit->text();
    OutPutForm *outputform = new OutPutForm;
    outputform->ui->outputLineEdit->setText(fileName);
    outputform->show();
}