-1

New to C++ and Qt as part of a research project (biology) and have been struggling with presumably some quite simple stuff. I'd really appreciate someone's help.

I'm working with a GUI for a pre-existing programme and I'm trying to transfer a QString variable from the QLineEdit of one of the windows (inputform), to the QLineEdit of a second window (output form).

The bit I'm stuck with is that I need the output form to appear, with it's LineEdit pre-populated, when I click a button on a third window (filedialog).

Problem:

  • At start up --> two windows appear: filedialog and inputform.
  • User enters data into inputform's QLineEdit
  • User presses 'transferButton' on filedialog window
  • On button press --> outputform appears, with a QLineEdit pre-populated with the user's data (from the inputform).

I assume the problem is of the getter/setter variety and my variable is probably going out of scope, but I've tried following lots of similar examples but can't make it work.

Thanks in advance.

Here's my code:

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 Answers1

0

Thank you for your brief pointer.

After some playing around:

Setup mainwindow (or in my case main dialog window). Generate inputform instance, connect button to 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()
{

}

Then from the input form:

Define a function to get the input form's LineEdit text (fileName); and then also generate an output form and populate it's LineEdit with the fileName variable.

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();
}