更改如何从另一个窗口接收Mainwindow中的信号

时间:2017-03-11 12:48:30

标签: c++ qt

我正在设计一个系统,其中包含一个Mainwindow和另外三个窗口。主窗口包含一个菜单按钮和四个Qlabels。点击菜单,它将打开第二个窗口。它包含两个按钮。单击第二个窗口中的第一个按钮将打开第三个窗口,单击第二个窗口中的第二个按钮将打开第四个窗口。第三和第四个窗口包含两个按钮。

当我在第三个窗口按第一个按钮时,我想在主窗口的第一个Qlabel中设置一些文本。同样当我在第三个窗口按第二个按钮时,我想在主窗口的第二个Qlabel中设置一些文本。 同样,我想设置Qlabel 3& 4基于第四窗口的按钮。

我读取信号和插槽机制,以及其他论坛,但我没有获得连接信号和插槽的流程。

要从上一个窗口打开新窗口,我将添加新的Qt类并编写

void MainWindow::on_pushButton_3_clicked()
 {
SecDialog secDialog;
secDialog.setModal(true);
secDialog.exec();
 }

在每个窗口中,并在点击按钮时从第四窗口发出信号

fouthwindow.cpp

void ForthDialog::on_pushButton_clicked()
 {

  emit mode1("Manualset");
 }

我在4thwindow.h中声明了这个。

signals :
   void mode1(QString) ;

如何从主窗口接收此信号?

1 个答案:

答案 0 :(得分:3)

您可以从代码中可以访问的位置简单地建立连接:

void MainWindow::on_pushButton_3_clicked()
{
    SecDialog secDialog;
    secDialog.setModal(true);
    connect(&secDialog, &SecDialog::mode1, this, &MainWindow::yourSlot);
    secDialog.exec();
}

然后处理它

void MainWindow::yourSlot()
{
    ui->myLabel->setText("...");
}

一些建议

  • 不要使用自动连接语法" on_pushButton_3_clicked()",而是使用显式连接,如上所述。
  • ,它更清晰,更灵活,更不容易出错
  • 请为您的班级/小工具使用好名字。任何表示该类角色的名称都优于ForthDialog。如果这些是你真正的班级名称
  • 对于对话框,请选择标准QDialog返回代码。使用accept()reject()done(),您可以直接从exec()来电的返回值中读取结果
相关问题