QDialog 数据传递

对话框的出现用于完成一个简单的或者是短期的任务。对话框与主窗口之间的数据交互相当重要。对话框分为模态和非模态两种。我们也将以这两种为例,分别进行阐述。模态对话框使用了 exec() 函数将其显示出来。exec() 函数执行代码就会被阻塞,后面的语句也就不会被执行到。因此,对于使用了 exec() 显示的模态对话框,我们可以在exec() 函数之后直接从对话框的对象获取到数据值。实际上,QDialog::exec() 是有返回值的,其返回值是 QDialog::Accepted或者 QDialog::Rejected。一般我们会使用类似下面的代码:

QDialog dialog(this);
if (dialog.exec() == QDialog::Accepted) {
    // do something
} else {
    // do something else
}

如果是非模态对话框,QDialog::show() 函数会立即返回,我们换一种思路获取数据,那就是使用信号槽机制由于非模态对话框在关闭时可以调用 QDialog::accept() 或者QDialog::reject() 或者更通用的 QDialog::done() 函数,所以我们可以在这里发出信号。另外,如果找不到合适的信号发出点,我们可以重写QDialog::closeEvent() 函数,在这里发出信号。在需要接收数据的窗口(这里是主窗口)连接到这个信号即可。类似的代码片段如下所示

// in dialog:
void UserAgeDialog::accept()
{
    emit userAgeChanged(newAge); // newAge is an int
    QDialog::accept();
}
// in main window:
void MainWindow::showUserAgeDialog()
{
    UserAgeDialog *dialog = new UserAgeDialog(this);
    connect(dialog, &UserAgeDialog::userAgeChanged, this, &MainWindow::setUserAge);
    dialog->show();
}
void MainWindow::setUserAge(int age)
{
    userAge = age;
}

源文来自:http://blog.chinaunix.net/uid-24219701-id-4042825.html

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将窗口的数据保存并传递到另一个窗口,可以使用以下步骤: 1. 在源窗口中,创建一个保存数据的变量或对象,并将数据存储在其中。 2. 在源窗口中,创建一个槽函数,该函数将从保存数据的变量或对象中获取数据并将其传递到目标窗口。 3. 在目标窗口中,创建一个接收数据的槽函数,以接收从源窗口传递数据。 4. 在源窗口中,创建一个信号并将其连接到槽函数,该信号将在需要传递数据时发出。 5. 在目标窗口中,创建一个指向源窗口的指针,并在构造函数中将其初始化。 6. 在目标窗口中,将信号连接到接收数据的槽函数,以便在源窗口发出信号时接收数据。 以下是示例代码: 在源窗口中: ```c++ // 创建保存数据的变量 QString data = "Hello World!"; // 创建槽函数,该函数将从保存数据的变量中获取数据并将其传递到目标窗口 void MainWindow::sendData() { SecondWindow* secondWindow = new SecondWindow(this); secondWindow->receiveData(data); secondWindow->show(); } // 创建信号,该信号将在需要传递数据时发出 signals: void dataSent(); ``` 在目标窗口中: ```c++ // 创建接收数据的槽函数 void SecondWindow::receiveData(QString data) { // 处理数据 qDebug() << data; } // 在构造函数中初始化指向源窗口的指针 SecondWindow::SecondWindow(QWidget *parent) : QDialog(parent), ui(new Ui::SecondWindow) { m_mainWindow = qobject_cast<MainWindow*>(parent); connect(m_mainWindow, &MainWindow::dataSent, this, &SecondWindow::receiveData); } // 将信号连接到接收数据的槽函数 connect(m_mainWindow, &MainWindow::dataSent, this, &SecondWindow::receiveData); ``` 在源窗口中,当需要传递数据时,调用 sendData() 函数发出信号。在目标窗口中,当信号发出时,将调用 receiveData() 函数接收数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值