【问题标题】:How change receive a signal in Mainwindow from another window更改如何从另一个窗口接收主窗口中的信号
【发布时间】:2017-08-01 19:15:53
【问题描述】:

我正在设计一个系统,其中包含一个主窗口和三个其他窗口。主窗口包含一个菜单按钮和四个 Qlabel。通过单击菜单,它将打开第二个窗口。它包含两个按钮。单击第二个窗口中的第一个按钮将打开第三个窗口,单击第二个窗口中的第二个按钮将打开第四个窗口。第三个和第四个窗口包含两个按钮。

当我在第三个窗口中按下第一个按钮时,我想在主窗口的第一个 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");
 }

我在第四个window.h中声明了这个

signals :
   void mode1(QString) ;

如何从主窗口接收这个信号?

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

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

    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() 调用的返回值中读取结果

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-03
      • 1970-01-01
      相关资源
      最近更新 更多