用QT写一个子窗口向子窗口单向传数据的代码
时间: 2024-02-20 08:56:59 浏览: 80
好的,以下是一个简单的示例代码:
首先,在父窗口中定义一个槽函数`updateData`,用于接收子窗口传来的数据:
```cpp
class ParentWindow : public QMainWindow
{
Q_OBJECT
public:
// ...
private slots:
void updateData(const QString& data); // 槽函数
private:
ChildWindow* childWindow; // 子窗口指针
};
```
然后,在父窗口的构造函数中创建子窗口,并将子窗口的信号`dataChanged`连接到父窗口的槽函数`updateData`:
```cpp
ParentWindow::ParentWindow(QWidget* parent)
: QMainWindow(parent)
{
// ...
childWindow = new ChildWindow(this); // 创建子窗口
connect(childWindow, &ChildWindow::dataChanged, this, &ParentWindow::updateData); // 连接信号和槽
}
```
接下来,在子窗口中定义一个槽函数`sendData`,用于向父窗口传递数据:
```cpp
class ChildWindow : public QWidget
{
Q_OBJECT
public:
// ...
signals:
void dataChanged(const QString& data); // 信号
private slots:
void sendData(); // 槽函数
private:
QPushButton* button; // 按钮指针
};
```
在子窗口的构造函数中创建一个按钮,并将按钮的点击信号`clicked`连接到子窗口的槽函数`sendData`:
```cpp
ChildWindow::ChildWindow(QWidget* parent)
: QWidget(parent)
{
// ...
button = new QPushButton("Send Data", this); // 创建按钮
connect(button, &QPushButton::clicked, this, &ChildWindow::sendData); // 连接信号和槽
}
```
最后,在子窗口的槽函数`sendData`中,通过调用`emit`函数发射信号,将数据传递给父窗口:
```cpp
void ChildWindow::sendData()
{
QString data = "Hello, parent!";
emit dataChanged(data); // 发射信号
}
```
在父窗口的槽函数`updateData`中,就可以接收子窗口传来的数据了:
```cpp
void ParentWindow::updateData(const QString& data)
{
qDebug() << "Received data from child: " << data;
}
```
这样,就实现了一个子窗口向父窗口单向传递数据的功能。
阅读全文