C++实践之Qt学习(八):多窗口间数据共享

方式一:信号和槽机制实现数据传递

利用信号和槽机制实现模态对话框和主窗口之间的数据传递。

第一步,在对话框中定义一个信号函数:

signals:
    void sendData(Contact);

信号函数不需要有实现,主要是发射这个信号,并且该信号要在主窗口中关联到槽函数中。

第二步,对话框中在指定的地方发射这个信号,并将要发送的数据作为参数:

void AddContactDlg::on_buttonBox_accepted()
{
    // 获取输入的联系人信息
    string name = string(ui->leName->text().toStdString());
    string gender = ui->radioMale->isChecked() ? "男" : "女";
    string phone = string(ui->lePhone->text().toLocal8Bit().data());
    string birthday = string(ui->deBirth->date().toString("yyyy-MM-dd").toLocal8Bit().data());
    string group = string(ui->leGroup->text().toStdString());

    // 构造联系人对象
    Contact c(0, name, gender, phone, birthday, group);

    // 发射信号
    emit sendData(c);

    // 关闭对话框
    this->close();
}

第三步,在主窗口中创建对话框,并关联信号和主窗口中定义的槽函数:

private slots:
    void getContact(Contact c);
void MainWindow::on_btnAdd_clicked()
{
    // 创建添加对话框
    AddContactDlg *acd = new AddContactDlg();
    acd->setModal(true);
    connect(acd, SIGNAL(sendData(Contact)), this, SLOT(getContact(Contact)));
    acd->exec();
    delete acd;
}

最后,当对话框中发射信号后,主窗口中将会收到信号并执行槽函数进行数据处理:

void MainWindow::getContact(Contact c)
{
    add(c);
    showContacts();
}

方式二:通过本地文件

可以想象本地文件为“数据库”、“数据源”,始终存储了当前项目中的最新数据,程序运行过程中,当进行增删改等操作时,需要把变化后的数据保存到本地文件,供查询操作使用。

窗口中对项目数据的操作需要及时反馈到文件中,例如当打开添加联系人对话框,进行联系人数据的添加时,点击保存按钮时将数据收集后保存到文件中,之后关闭添加对话框。

当关闭了添加对话框厚,主窗口中需要立刻读取文件进行数据显示的刷新。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值