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 条评论