首页 > 解决方案 > 无法使用自定义信号连接两个帧

问题描述

我正在尝试使用自定义信号连接两个帧,但我并没有真正得到它。

这段代码只是我试图在我的程序中做的一个例子,我的目标是在帧之间传输数据。

文件:

(发件人)

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H

    #include <QMainWindow>

    namespace Ui {
    class MainWindow;
    }

    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    signals:
        void send();

    public:
        explicit MainWindow(QWidget *parent = nullptr);
        ~MainWindow();

    private:
        Ui::MainWindow *ui;
    private slots:
        void on_pushButton_clicked();
    };

    #endif // MAINWINDOW_H

在“mainwindow.cpp”上,我有 void on_pushButton_clicked() 发出信号并显示新帧:

私人插槽无效:

        void MainWindow::on_pushButton_clicked()
    {
        emit send();
        Dialog sw;
        sw.setModal(true);
        sw.exec();
    }

(接收者):

        #ifndef DIALOG_H
    #define DIALOG_H

    #include <QDialog>
    #include <QDebug>

    namespace Ui {
    class Dialog;
    }

    class Dialog : public QDialog
    {
        Q_OBJECT

    public:
        explicit Dialog(QWidget *parent = nullptr);
        ~Dialog();

    private slots:
        void receive();

    private:
        Ui::Dialog *ui;
        int a;
    };

    #endif // DIALOG_H

和.cpp:

        #include "dialog.h"
    #include "ui_dialog.h"
    #include "mainwindow.h"


    Dialog::Dialog(QWidget *parent) :
        QDialog(parent),
        ui(new Ui::Dialog)
    {
        ui->setupUi(this);
        a=0;
        MainWindow w;
        connect(&w, SIGNAL(send()), this, SLOT(receive()));
        qDebug() << a;
    }


    Dialog::~Dialog()
    {
        delete ui;
    }

    void Dialog::receive(){
        qDebug() << "ola";
        a++;
    }

结论:所以基本上函数 Dialog 不会打印 qDebug(),并且 'a' 仍然是 0,所以我得出结论,连接没有设置/执行。

谢谢大家,最好的问候,迪伦洛佩斯。

编辑:在帖子末尾写了一个结论。

标签: c++qt

解决方案


信号与槽的连接并不意味着信号功能会被触发。

您仍然需要发出信号以便a更新。

创建一个空插槽也不起作用,因为插槽是信号的接收点。在这种情况下,on_pushButton_clicked()当他按下按钮时被触发。这不会触发send,除非您调用EMIT(send())(IIRC,您使用 EMIT 发出信号,仍然如此吗?)。


推荐阅读