qt中显示在父窗口上显示子窗口
时间: 2024-10-22 22:05:47 浏览: 24
在Qt中,创建一个可显示在父窗口上的子窗口通常涉及到以下几个步骤:
1. **创建子窗口**:
在`myform.cpp`或`logindlg.cpp`这样的子窗口类定义中(如`QDialog`或自定义窗口类),设计并构建所需的界面。
```cpp
// logindlg.cpp 或 myform.cpp
class LoginDlg : public QDialog {
Q_OBJECT
private slots:
void submitData(); // 按钮点击事件,将在下面定义
public:
explicit LoginDlg(QWidget *parent = nullptr);
};
```
2. **槽函数提交数据**:
当子窗口内的操作完成(如表单填写)时,可以设置一个槽函数来处理数据并将它们发送到父窗口。
```cpp
// 在logindlg.cpp中
void LoginDlg::submitData() {
// 获取表单数据
QString username = ui->usernameLineEdit->text();
int password = ui->passwordLineEdit->text().toInt();
// 创建信号发射器
emit sendData(username, password); // 假设有一个名为sendData的信号
}
```
3. **在父窗口接收数据**:
在`mainwindow.cpp`或其他父窗口类中,声明一个信号连接槽以接收子窗口的数据。
```cpp
// mainwindow.cpp 或 main.cpp
class MainWindow : public QMainWindow {
Q_OBJECT
public slots:
void receiveData(const QString &username, int password); // 接收数据的槽函数
signals:
void sendDataToParent(const QString &username, int password); // 发送数据的信号
protected:
void createLoginWindow();
};
```
4. **建立连接**:
在`MainWindow`的构造函数或适当位置,通过`connect`函数将信号与槽关联起来。
```cpp
// 在MainWindow构造函数中
MainWindow(QWidget *parent = nullptr)
: QMainWindow(parent)
{
connect(loginDlg, &LoginDlg::sendData, this, &MainWindow::sendDataToParent);
}
void sendDataToParent(const QString &username, int password) {
// 处理接收到的数据,在父窗口中显示或做其他操作
qDebug() << "Received data: Username - " << username << ", Password - " << password;
}
void createLoginWindow() {
LoginDlg loginDlg(this);
loginDlg.show();
}
```
这样,当子窗口中的表单数据准备好时,会通过信号`sendData`传递给父窗口,然后由父窗口的槽函数`receiveData`处理。
阅读全文