RicoRicochet
RicoRicochet

Reputation: 2289

Display the input of QLineEdit in a different window and or dialog?

I am writing a small QT gui application where there is a QLineEdit in my mainwindow.ui and I want to display the entered text in a separate dialog and or window when a button is pressed.

Now, I have stored the input in a variable, and I am also able to show this string on a label within this same mainwindow,

void MainWindow::on_GoButton_clicked()
{
    QString mytext = ui->lineEdit_1->text();
    ui->label_1->setText(mytext);
}

Now, I want to open a popup dialog (can be a window also), for example SecDialog;

SecDialog secdialog;
secdialog.setModal(true);
secdialog.exec();

and display the text of mainwindow->mytext string variable in a label of the SecDialog. How can I do that ??? I know it is a basic level question, but I think it will help clear lot of my doubts reagrding moving values of variables in between forms and classes.

Upvotes: 1

Views: 2755

Answers (3)

Tay2510
Tay2510

Reputation: 5978

Situation

So this is your situation:

enter image description here

From your code, the dialog is a modal dialog:

SecDialog secdialog;
//secdialog.setModal(true); // It's not needed since you already called exec(), and the 
                            // dialog will be automatically set to be modal just like what
                            // document says in Chernobyl's answer 

secdialog.exec();          

Solution

To make the dialog display the text from the Window,

the concept is to pass the information(text) from the Window to the dialog, and use a setter function from the dialog to display it.

Like Floris Velleman's answer, he passed the mytext string (by reference) to a customized dialog constructor and called the setter theStringInThisClass(myString) at once.

The implementation detail of this function is complemented by Chernobyl's answer (use the name setLabelText instead):

void SecDialog::setLabelText(QString str)
{
    ui->label->setText(str); // this "ui" is the UI namespace of the dialog itself.
                             // If you create the dialog by designer, it's from dialog.ui
                             // Do not confuse with the ui from mainwindow.ui
}

Chernobyl suggested another way which calls the setter in the slot function and it bypasses the need of defining another constructor, but basically the concept is the same:

void MainWindow::on_GoButton_clicked()
{
    QString mytext = ui->lineEdit_1->text();
    ui->label_1->setText(mytext);
    SecDialog secdialog;

    secdialog.setLabelText(myText); // display the text in dialog

    secdialog.exec();
}

Comment

I try to illustrate the concept as clear as possible, because from my previous experience on your question, you just "copy & paste" codes from answers and took them as your final solution, which is not right. So I hope this summary could help you understand the concept and then you may write your own code.

Upvotes: 3

Floris Velleman
Floris Velleman

Reputation: 4888

Assuming SecDialog is a custom class with an interface file as well you might want to pass it as a constructor argument or pass it by using another function.

So in the SecDialog constructor you could have something like:

SecDialog::SecDialog(QWidget* parent, const QString& myString)
    : QDialog(parent),
    theStringInThisClass(myString) 
{}

And then you could call it like:

SecDialog secdialog(this, mytext);

Upvotes: 1

Jablonski
Jablonski

Reputation: 18504

This task can be easy done with getter/setter method or with signal and slot, but setter is more suitable here. In SecDialog header:

public:
void setLabelText(QString str);
//in cpp 
void SecDialog::setLabelText(QString str)
{
    ui->label->setText(str);//it is label dialog
}

Usage:

secDialog.setLabelText(myText);

Also line where you set modal to true is not necessary because

This property holds whether show() should pop up the dialog as modal or modeless. By default, this property is false and show() pops up the dialog as modeless. Setting his property to true is equivalent to setting QWidget::windowModality to Qt::ApplicationModal. exec() ignores the value of this property and always pops up the dialog as modal.

Upvotes: 1

Related Questions