【问题标题】:pass value from first window to second window pressing button and should hide first window after press button将值从第一个窗口传递到第二个窗口按下按钮,并在按下按钮后隐藏第一个窗口
【发布时间】:2017-12-16 12:47:23
【问题描述】:

这个项目中有两个窗口。第一个命名为 firstform,另一个命名为 seconform。

在第一个表单中,用户可以在 QlineEdit 上键入,然后单击按钮。第一个表单关闭,第二个表单将打开,在标签的第二个窗口中,应该显示键入的窗口。

表示第一个窗口的lineEdit中的数据应该传递给第二个窗口的标签

【问题讨论】:

  • 那么您尝试了什么来解决这个问题? 如何你的尝试没有成功?
  • 我尝试使用 SLOT 和 SIGNAL 它是有效的,但是当我运行程序时,两个窗口都显示,但我需要在第一个窗口上按下按钮并打开第二个窗口并显示 lineEdit 的值在标签上

标签: c++ qt


【解决方案1】:

基本上,有两种方法可以在不同类的实例之间传递信息(或动作):

您可以让两种形式中的一种意识到另一种形式,即给出 SecondForm这样的方法:

void setLabelTextAndShow(QString);

并从FirstForm 调用它。这意味着一些重要的事情: FirstForm 必须知道 SecondForm 公共接口并且必须是 能够访问它(即必须至少有一个指向 SecondForm 实例)。

或者您使用 Qt 信号/槽内置机制使表单彼此不可知。

因此,在 SecondForm 中,您有一个 slot,而不是像上面那样的公共方法:

private slots:
  void setLabelTextAndShow(QString);

在 FirstForm 中,您声明 signal:

signals:
  void pushBttonClicked(QString lineEditText);

点击按钮时会“发射”:

void FirstForm::on_pushButton_clicked()
{
  emit pushBttonClicked(ui->lineEdit->text());
  this->close();
}

并被困在 SecondForm 插槽中:

void SecondForm::setLabelTextAndShow(QString text)
{
  ui->label->setText(text);
  this->show();
}

您必须在使用前连接信号和插槽。让它发生在 main 中:

#include "firstform.h"
#include "secondform.h"

#include <QApplication>

int main(int argc, char *argv[])
{
  QApplication app(argc, argv);

  FirstForm f1;
  SecondForm f2;

  QObject::connect(&f1, SIGNAL(pushBttonClicked(QString)), &f2, SLOT(setLabelTextAndShow(QString)));

  f1.show();

  return app.exec();
}

使用第二种方法,您避免了在类之间创建依赖,这在可重用性方面非常好。

【讨论】:

  • 我还有一个问题,这个项目有两个窗口。第一个命名为 firstform,另一个命名为 seconform。我在 firstform.h int x 中声明了一个以整数命名的变量 x;我在 firstform.cpp x=10; 中为该变量分配了一个值;在该用户运行程序后,在第一个表单中,用户单击按钮。 secondform 将打开,并且在标签上的 secondform 窗口中,应显示变量值。 (10) 表示第一个窗口的lineEdit中的数据应该传递到第二个窗口的标签
  • 我认为您应该对此提出适当的问题。并不是说我不想帮助您,但是如果您将问题发布在应该出现的位置(而不是在 cmets 中),您就有更多机会得到回答。另外,出于同样的原因,我强烈建议您将一些代码与您的问题一起发布:它更有可能得到回答。祝你有美好的一天。
  • 这个项目有两个窗口。这些被表示为 FirstForm 和 SecondForm。第一种形式有一个按钮,第二种形式有一个标签。我将一个整数变量声明为 int x;在名为 first form.h 的文件中。我在名为 firstform.cpp 的文件中为 x 分配了一个值。该值为 10 (x=10)。当用户单击第一个窗体上的按钮时,如果项目正在运行,则必须打开第二个窗体,并且必须在标签中显示 10。
  • 所以,基本上是同一个问题。你不觉得吗?
猜你喜欢
  • 2016-11-19
  • 2019-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多