我正在编写一个小型QT gui应用程序,其中我的mainwindow.ui中有一个QLineEdit,我想在按下按钮时在单独的对话框和窗口中显示输入的文本。
现在,我已将输入存储在变量中,并且我还能够在同一主窗口的标签上显示此字符串,
void MainWindow::on_GoButton_clicked()
{
QString mytext = ui->lineEdit_1->text();
ui->label_1->setText(mytext);
}
现在,我想打开一个弹出对话框(也可以是一个窗口),例如SecDialog;
SecDialog secdialog;
secdialog.setModal(true);
secdialog.exec();
并在SecDialog的标签中显示mainwindow-> mytext字符串变量的文本。我怎样才能做到这一点 ???我知道这是一个基本的问题,但我认为这将有助于清除我在表格和类之间重复移动变量值的疑虑。
答案 0 :(得分:3)
所以这是你的情况:
在您的代码中,对话框为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();
要使对话框显示窗口中的文本,
概念是从窗口传递信息(文本) 到对话框,并使用对话框中的设置器功能来显示它。
与 Floris Velleman 的答案一样,他将mytext
字符串(通过引用)传递给自定义对话框构造函数,并立即调用setter theStringInThisClass(myString)
。
此功能的实施细节由切尔诺贝利的答案补充(改为使用名称setLabelText
):
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
}
切尔诺贝利提出了另一种在插槽函数中调用setter的方法,它绕过了定义另一个构造函数的需要,但基本上概念是相同的:
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();
}
我尝试尽可能清楚地说明这个概念,因为根据我之前对你的问题的经验,你只需" copy&从答案中粘贴" 代码并将其作为最终解决方案,这是不对的。所以我希望这个摘要可以帮助您理解这个概念,然后您可以编写自己的代码。
答案 1 :(得分:1)
假设SecDialog
是一个带有接口文件的自定义类,您可能希望将其作为构造函数参数传递或使用其他函数传递它。
所以在SecDialog
构造函数中你可以有类似的东西:
SecDialog::SecDialog(QWidget* parent, const QString& myString)
: QDialog(parent),
theStringInThisClass(myString)
{}
然后你可以这样称呼它:
SecDialog secdialog(this, mytext);
答案 2 :(得分:1)
使用getter / setter方法或使用信号和插槽可以轻松完成此任务,但此处更适合setter。在SecDialog标题中:
public:
void setLabelText(QString str);
//in cpp
void SecDialog::setLabelText(QString str)
{
ui->label->setText(str);//it is label dialog
}
用法:
secDialog.setLabelText(myText);
也不需要将modal设置为true的行,因为
此属性保持show()是否应将对话框弹出为模态 或无模式。默认情况下,此属性为false,并弹出show() 对话无模式。将其属性设置为true等同于 将QWidget :: windowModality设置为Qt :: ApplicationModal。的 EXEC() 忽略此属性的值,并始终弹出对话框 模态的。强>