我的主窗体上有一个按下按钮(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();
}
它创建对话窗口renametargets。
Window有三个文本编辑行(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)当我按下对话框上的OK按钮时,如何将QString Target1NameInput(位于第二种形式:renametargets)的文本设置为label_Tar1ex(位于主窗体上)。
(2)如何显示label_Tar1ex(位于主窗体上)以显示在第二种形式的标签上 - 名为label_CurrentName_Tar1ex。
基本上这是一个重命名方案.....
答案 0 :(得分:2)
我要做的是在对话框的类中声明Target1NameInput
和其他人而不是Ok函数。这样那些变量总是存在"你的对话存在。如果你在Ok函数中创建它们,那么当函数结束时它们就会消失,然后你就不能再从你的mainWindow中获取它们了。
将变量声明移动到对话框的类中。 (他们公开上映,所以其他课程可以得到他们)
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();
}
最后,访问mainWindow中的那些变量。
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,则只需在调用renametargets.Target1NameInput = ui->label_Tar1ex->text();
之前为每个变量调用renametargets.exec();
然后在对话框的ui设置中,将lineEdits文本设置为相同的变量。
如果您希望我为您解释选项2,请告诉我。 ;)
还有许多其他选项可以在类之间发送变量,这只是其中的一种。我相信传统的做法是在对话框类中获取和设置函数,但对于我自己的个人项目,我发现它有点矫枉过正。由你决定。
答案 1 :(得分:1)
if (editDocumentDialog->exec() == QDialog::Accepted)
{
editDocumentDialog->getDataRecord(theDocRecord);
documents->updateRecord(theDocRecord);
}
答案 2 :(得分:0)
为什么不使用信号/插槽?
void MainWindow::on_pushButton_RenameTargets_clicked()
{
RenameTargets renametargets;
connect(&renametargets, SIGNAL(name_inputted), this, SLOT(update_name_fields);
...
}
然后在on_buttonBox_TargetRename_accepted中发出信号,并在插槽函数中更新label_Tar1ex ....您可能希望在堆中创建RenameTargets,以便在单击“确定”后立即销毁它。