Qt子窗口部件提升为类后,该类如何接收父窗口的信号
时间: 2023-07-19 14:06:42 浏览: 44
当将一个Qt子窗口部件提升为一个类后,该类可以通过以下步骤接收父窗口的信号:
1. 在子窗口部件的类中,定义一个槽函数,处理父窗口发送的信号。
2. 在父窗口中,将子窗口部件的信号连接到子窗口部件的槽函数上。
3. 在父窗口中,实例化该子窗口部件的类对象,并将其添加到父窗口中。
4. 在父窗口中,调用该子窗口部件对象的信号函数,即可触发子窗口部件的槽函数。
以下是一个示例代码:
```
// 子窗口部件类 MyWidget.h
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>
class MyWidget : public QWidget
{
Q_OBJECT
public:
explicit MyWidget(QWidget *parent = nullptr);
public slots:
void onParentSignalReceived();
};
#endif // MYWIDGET_H
// 子窗口部件类 MyWidget.cpp
#include "MyWidget.h"
MyWidget::MyWidget(QWidget *parent) : QWidget(parent)
{
// 构造函数
}
void MyWidget::onParentSignalReceived()
{
// 处理父窗口发送的信号
}
// 父窗口类 MainWindow.cpp
#include "MainWindow.h"
#include "MyWidget.h"
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
// 构造函数
// 实例化 MyWidget 类对象
MyWidget *myWidget = new MyWidget(this);
// 将 MyWidget 对象添加到父窗口中
setCentralWidget(myWidget);
// 将父窗口的信号连接到 MyWidget 对象的槽函数上
connect(this, SIGNAL(parentSignal()), myWidget, SLOT(onParentSignalReceived()));
}
void MainWindow::on_button_clicked()
{
// 触发父窗口的信号函数,即可触发 MyWidget 对象的槽函数
emit parentSignal();
}
// 父窗口类 MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
signals:
void parentSignal();
private slots:
void on_button_clicked();
};
#endif // MAINWINDOW_H
```