gpt4 book ai didi

c++ - 如何将多个变量从 QT 对话框传递到主窗口

转载 作者:行者123 更新时间:2023-11-27 23:58:39 25 4
gpt4 key购买 nike

我的主窗体上有一个按钮 (pushButton_RenameTargets) 和 3 个带有默认文本值的标签(label_Tar1ex、label_Tar2ex、label_Tar3ex)。当我按下按钮 (pushButton_RenameTargets) 时,会创建一个对话框 (renametargets)。它具有三个文本编辑行(lineEdit_Target1、lineEdit_Target2、lineEdit_Target3)。当我在三个文本编辑行中输入名称并按下“确定”时,我希望更新主窗体上的 3 个标签。

更好的描述:

按下按钮时:

void MainWindow::on_pushButton_RenameTargets_clicked()
{
RenameTargets renametargets;
renametargets.setModal(true);
renametargets.exec();
}

它创建对话窗口重命名目标。

窗口具有三个文本编辑行(lineEdit_Target1、lineEdit_Target2、lineEdit_Target3)。

按下 OK 按钮后,我将文本存储在 QString 变量中。

void RenameTargets::on_buttonBox_TargetRename_accepted()
{
QString Target1NameInput = ui->lineEdit_Target1->text();
QString Target2NameInput = ui->lineEdit_Target2->text();
QString Target3NameInput = ui->lineEdit_Target3->text();
}

问题:(1) 当我按下对话框上的“确定”按钮时,如何将 QString Target1NameInput(位于第二种形式:renametargets)的文本设置为 label_Tar1ex(位于主形式)。

(2) 我怎样才能显示 label_Tar1ex(位于主窗体)以显示在第二种形式的标签上——称为 label_CurrentName_Tar1ex。

基本上这是一个重命名方案.....

最佳答案

我要做的是在对话框的类中声明 Target1NameInput 和其他而不是 Ok 函数。这样,当您的对话存在时,这些变量总是“存在”。如果您在 Ok 函数中创建它们,那么当该函数结束时它们就会消失,然后您就无法再从 mainWindow 中获取它们。

将变量声明移动到对话框的类中。 (他们公开所以其他类(class)可以得到他们)

class RenameTargets : public QDialog
{
Q_OBJECT

public:

QString Target1NameInput; //Side note, variable naming convention says
QString Target2NameInput; //that variables should start with a lowercase
QString Target3NameInput; //letter, but totally up to you ;)

//Your other class stuff goes here
}

从那时起,您可以在按下“确定”时在对话框中设置这些变量。

void RenameTargets::on_buttonBox_TargetRename_accepted()
{
Target1NameInput = ui->lineEdit_Target1->text();
Target2NameInput = ui->lineEdit_Target2->text();
Target3NameInput = ui->lineEdit_Target3->text();
}

最后,在您的主窗口中访问这些变量。

void MainWindow::on_pushButton_RenameTargets_clicked()
{
RenameTargets renametargets;
renametargets.setModal(true);
if(renametargets.exec() == QDialog::Accepted) //Check if they clicked Ok
{
ui->label_Tar1ex->setText(renametargets.Target1NameInput);
ui->label_Tar2ex->setText(renametargets.Target2NameInput);
ui->label_Tar3ex->setText(renametargets.Target3NameInput);
}

}

关于你的第二个问题,从 mainWindow 发送到对话框,我认为你有 2 个选项。

  1. 在 exec() 之前设置我们在您的对话框类中创建的字符串变量。
  2. 在对话框构造函数中传递文本。

如果选项 1,那么您只需在调用 renametargets.exec(); 之前为每个变量调用 renametargets.Target1NameInput = ui->label_Tar1ex->text(); > 然后在对话框的用户界面设置中,将 lineEdits 文本设置为相同的变量。

如果您想让我为您解释选项 2,请告诉我。 ;)

还有许多其他选项可以在类之间发送变量,这只是其中一种方式。我相信传统的做法是在对话框类中使用 get 和 set 函数,但对于我自己的个人项目,我发现这太过分了。由你决定。

关于c++ - 如何将多个变量从 QT 对话框传递到主窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40776308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com