1. 程式人生 > >QT 訊號和槽的關聯和斷開

QT 訊號和槽的關聯和斷開

#include "widget.h"
#include "ui_widget.h"
#include "mydialog.h"
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    MyDialog* dlg =new  MyDialog(this);
    //連線方式
    connect(dlg, &MyDialog::dlgReturn,this,&Widget::showValue);
    connect(dlg,SIGNAL(dlgReturn(int)),this,SLOT(showValue(int)));
    QMetaObject::Connection myConnection=connect(dlg,&MyDialog::dlgReturn,[=](int value){
        ui->label->setText(tr("獲取的值是:%1").arg(value));
    });
    //斷開方式
    // 斷開與一個物件所有訊號的所有關聯
    disconnect(dlg,0,0,0,0);
    // 和上面功能一樣
    dlg->disconnect();
    // 斷開與一個指定訊號的所有關聯
    disconnect(dlg,SIGNAL(dlgReturn(int)),0,0);
    // 和上面功能一樣
    dlg->disconnect(SIGNAL(dlgReturn(int)));
    //  斷開與一個指定的receiver的所有關聯
    disconnect(dlg,0,this,0);
    dlg->disconnect(this);
    //  斷開一個指定訊號和槽的關聯
    disconnect(dlg,SIGNAL(dlgReturn(int)),this,SLOT(showValue(int)));
    dlg->disconnect(SIGNAL(dlgReturn(int)),this,SLOT(showValue(int)));
    disconnect(myConnection);


    dlg->show();
}

Widget::~Widget()
{
    delete ui;
}

void Widget::showValue(int value)
{
    ui->label->setText(tr("獲取的值是:%1").arg(value));
}