https://blog.csdn.net/ccc369639963/article/details/122665026
https://zhuanlan.zhihu.com/p/648165514

windows之间信号传递

在这个例子中,当MyWindow发送mySignal时,MainWindow的handleSignal槽函数会被调用,并接收到从MyWindow发送的值。

  • 首先,定义你的信号和槽函数。在接收信号的窗口类中,你需要声明信号,并提供一个槽函数来处理信号。
// mywindow.h
#ifndef MYWINDOW_H
#define MYWINDOW_H

#include <QWidget>

class MyWindow : public QWidget {
    Q_OBJECT
public:
    explicit MyWindow(QWidget *parent = nullptr);

signals:
    void mySignal(int value);

private:
    // 触发信号的部分
};

#endif // MYWINDOW_H
  • 然后,在你想要发送信号的地方,使用emit关键字发送信号。
// mywindow.cpp
#include "mywindow.h"

MyWindow::MyWindow(QWidget *parent) : QWidget(parent) {
    // 构造函数的其他部分

    // 当你想要发送信号时
    emit mySignal(10); // 假设发送的值是10
}
  • 在另一个窗口中,你需要声明你想要连接的信号,并提供一个槽函数来处理它。
// mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

class MainWindow : public QMainWindow {
    Q_OBJECT

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

public slots:
    void handleSignal(int value);
};

#endif // MAINWINDOW_H
  • 在cpp文件中实现槽函数。
// mainwindow.cpp
#include "mainwindow.h"
#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent) {
    // MainWindow的构造函数
}

MainWindow::~MainWindow() {
    // MainWindow的析构函数
}

void MainWindow::handleSignal(int value) {
    qDebug() << "Received signal with value:" << value;
    // 处理信号的其他代码
}
  • 最后,你需要连接这两个信号和槽函数。这通常在窗口的构造函数中完成。
// main.cpp
#include "mywindow.h"
#include "mainwindow.h"
#include <QApplication>

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

    MyWindow myWindow;
    MainWindow mainWindow;

    // 连接信号和槽
    QObject::connect(&myWindow, &MyWindow::mySignal, &mainWindow, &MainWindow::handleSignal);

    myWindow.show();
    mainWindow.show();

    return a.exec();
}

0 条评论

发表回复

您的电子邮箱地址不会被公开。