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

岁酱吖の 提交于 2020-08-02 05:27:09

问题


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.


回答1:


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.




回答2:


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.




回答3:


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


来源:https://stackoverflow.com/questions/27798741/display-the-input-of-qlineedit-in-a-different-window-and-or-dialog

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!