store variables from a qdialog to use in qmainwindow
-
29-06-2021 - |
Pregunta
I've created a dialog.h, dialog.cpp and a dialog.ui, and I have qlineedit in the dialog, as well as ok and cancel button, and i want to store those linedit information to use in a mainwindow in a different file. here's my dialog code.
#include <QtGui/QApplication>
#include "dialog.h"
#include "ui_dialog.h"
void Dialog::startplanevolume()
{
if (xMax==0)
{
ui->label_17->setText("Error: Can't start, invalid \nmeasures");
}
else
{
this->accept();
}
}
// Define the length of the volume
void Dialog::bmprange()
{
// Getting some proprieties for the lenght of the volume
QString XMAX=ui->lineEdit->text();
xMax=XMAX.toDouble();
if (xMax==0)
{
ui->label_17->setText("Error: invalid measures");
}
else
{
ui->label_17->setText("Valid measures");
}
}
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
// Control volume measures
// Making the lineedit objects only accept numbers
ui->lineEdit->setValidator(new QIntValidator(this));
connect(ui->lineEdit, SIGNAL(textChanged(QString)), this, SLOT(bmprange()));
// Start planevolume
connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(startplanevolume()));
connect(ui->pushButton_2, SIGNAL(clicked()), this, SLOT(hide()));
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::changeEvent(QEvent *e)
{
QDialog::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}
how can i get to use the value of xMax in mainwindow.cpp??
here's my dialog.h
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
namespace Ui {
class Dialog;
}
class Dialog : public QDialog {
Q_OBJECT
public:
Dialog(QWidget *parent = 0);
~Dialog();
protected:
void changeEvent(QEvent *e);
private:
Ui::Dialog *ui;
double xMax, yMax, zMax, xMMax, yMMax, zMMax, list[6];
public slots:
void bmprange();
void startplanevolume();
};
#endif // DIALOG_H
here's my main.cpp
#include <QtGui/QApplication>
#include "planevolume.h"
#include "dialog.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
Dialog *dialog= new Dialog;
if (dialog->exec())
{
planevolume mainwindow;
mainwindow.show();
return app.exec();
}
return 0;
}
so then I want to use xMax to calculate something in planevolume.cpp, the mainwindow
Solución
I think you can create a getter function in the dialog. After the dialog is closed, you can access the variable using the created getter function.
The returned variable you can give as a parameter to the mainwindow (planvolume.cpp).
I hope that helps.
Edit:
In the dialog.h / dialog.cpp you add an function:
double Dialog::getXMax()
{
return xMax;
}
After that you can acces the variable in the main.cpp:
Dialog *dialog= new Dialog;
if (dialog->exec())
{
double xMax = dialog->getXMax();
planevolume mainwindow;
mainwindow.show();
return app.exec();
}
Otros consejos
Although you could declare xMax
as public member of Dialog
and just use it, the more elegant and OO style approach is to write a "getter" function declared in the public
area of your Dialog
class:
(...)
public:
Dialog(QWidget *parent = 0);
~Dialog();
double getxMax() { return xMax; }
(...)
You would also need a setter
function in your planevolume
class, also declared in the public
area, as:
void setxMax(double xMax);
The body of this function would take care of doing whatever is necessary with the value of xMax
.
Finally, in your main()
function, you would do the following:
if (dialog->exec())
{
planevolume mainwindow;
mainwindow.setxMax(dialog->getxMax()); // This passes xMax to main window
mainwindow.show();
return app.exec();
}
Alternatively, you could just overload the show()
function of planevolume
as
planevolume::show(double xMax)
{
// Do whatever you want with XMax
show(); // And call original show function
}
in which case you do not need the setter
function and just call
mainwindow.show(dialog->getxMax());