qt 子窗口发送信号到父窗口,c++示例
时间: 2023-07-13 07:21:23 浏览: 118
以下是一个简单的示例,演示如何在Qt中实现子窗口向父窗口发送信号:
MyChildWindow.h:
```cpp
#ifndef MYCHILDWINDOW_H
#define MYCHILDWINDOW_H
#include <QWidget>
class QPushButton;
class MyChildWindow : public QWidget
{
Q_OBJECT
public:
explicit MyChildWindow(QWidget *parent = nullptr);
signals:
void sendData(const QString &data);
private slots:
void sendButtonClicked();
private:
QPushButton *sendButton;
};
#endif // MYCHILDWINDOW_H
```
MyChildWindow.cpp:
```cpp
#include "MyChildWindow.h"
#include <QPushButton>
#include <QVBoxLayout>
MyChildWindow::MyChildWindow(QWidget *parent) : QWidget(parent)
{
sendButton = new QPushButton("Send Data", this);
connect(sendButton, &QPushButton::clicked, this, &MyChildWindow::sendButtonClicked);
QVBoxLayout *layout = new QVBoxLayout(this);
layout->addWidget(sendButton);
setLayout(layout);
}
void MyChildWindow::sendButtonClicked()
{
emit sendData("Hello from child window!");
}
```
MainWindow.h:
```cpp
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QLabel>
class MyChildWindow;
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
public slots:
void receiveData(const QString &data);
private:
QLabel *label;
MyChildWindow *childWindow;
};
#endif // MAINWINDOW_H
```
MainWindow.cpp:
```cpp
#include "MainWindow.h"
#include "MyChildWindow.h"
#include <QVBoxLayout>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
label = new QLabel("No data received yet", this);
childWindow = new MyChildWindow(this);
connect(childWindow, &MyChildWindow::sendData, this, &MainWindow::receiveData);
QVBoxLayout *layout = new QVBoxLayout(this);
layout->addWidget(label);
layout->addWidget(childWindow);
QWidget *centralWidget = new QWidget(this);
centralWidget->setLayout(layout);
setCentralWidget(centralWidget);
}
MainWindow::~MainWindow()
{
}
void MainWindow::receiveData(const QString &data)
{
label->setText("Data received: " + data);
}
```
在这个示例中,`MyChildWindow`类表示子窗口,它包含一个名为"sendButton"的按钮,当用户单击该按钮时,它会触发一个名为"sendData"的信号。该信号被定义为`void sendData(const QString &data)`,其中"data"表示要传递的数据。
`MainWindow`类表示父窗口,它包含一个名为"label"的标签,用于显示从子窗口接收到的数据。它还包含一个名为"childWindow"的`MyChildWindow`对象,该对象连接到该对象的"sendData"信号的`receiveData`槽函数。当子窗口触发"sendData"信号时,`MainWindow`的`receiveData`槽函数将被调用,它将接收到的数据显示在"label"标签中。
阅读全文