Qt界面之间信息传递(自身项目经验,一文必懂)

        Qt最常用的就是信号与槽这一结构,对于这一结构,我们可以看下Qt4和Qt5以上版本的差别

connect(ui->QCP_fabric_edit,SIGNAL(mousePress(QMouseEvent*)),this,
SLOT(myMousePressEvent(QMouseEvent*)));    //Qt4写法
   connect(ui>QCP_fabric_edit,&QCustomPlot::mousePress,this,
&database_control::MyMousePressEvent);

映入眼帘的绝对是SIGNAL这一写法,但是事实上我们可以从鼠标按压这一事件可以看出,Qt5更加突出的是这个信号和槽的所属类,这也是我们学习信号和槽这一概念的关键。

言归正传,接下来讨论界面间信息传递。其主要包括两种类型,一种是当前页面向子页面传递数据;另一种则是子页面向当前页面传递数据。

  • 子页面向当前页面传递数据

为什么先说子页面向当前页面传递数据,因为简单。在connect过程中,我们需要考虑的是信号和槽之间的归属。

fatheritem
    childitem = new childitem(this);

在父页面我们创建了子页面的句柄,使用这个我们既可以从子页面接收到信号,并传递到父界面。

    dialog_Accuracy * dialog_A = new dialog_Accuracy(this);
    connect(ui->btn_accuracy,&QAction::triggered,this,[=](){
        dialog_A->show();
    });
    connect(dialog_A,&dialog_Accuracy::sendAccuracy,this,[=](int a){
        accuracy = a;
        qDebug() << "accuracy" << accuracy;
        dialog_A->done(100);
    });

如这一段代码就是从子页面接收一个sendAccuracy的型号并放给父页面进行信息传递。

  • 当前页面向子页面传递数据

这种方式相对上一种,有点绕,但是理解了也就没什么秘密了。

子页面没有父页面的句柄,那么我们向上面那样写显然是不行的。所以我们仍要从父页面着手。当我们发信号时,仍要从父界面发,用上面那段代码我们可以这样来

    dialog_Accuracy * dialog_A = new dialog_Accuracy(this);
    connect(ui->btn_accuracy,&QAction::triggered,this,[=](){
        dialog_A->show();
    });
    connect(,&father::father_signal,dialog_A,&child::child_slot);

我们从主页面定义一个father_signal信号发出,并在后面接一个接收槽,但是槽的定义我们在子界面定义,这样就将数据顺利的传输到子界面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值