QT中信号与槽可以是一一对应,也可以是一个信号关联到多个槽上,多个信号关联到一个槽上,是N-N的模式。
本文实现的是一个信号关联到两个槽上。
比如:把Dialog1对话框上的值10、20,显示到另外两个对话框MainWindow 和Dialog2。
点击Dialog1上的pushButton后 MainWindow和Dialog2分别显示10 20
步骤:1.创建三个对话框 分别是MainWindow、Dialog1、Dialog2,每个对话框上布置好相应的控件。
2. Dialog1上定义发射信号,定义实现槽
3. MainWindow、Dialog2接收信号、实现关联、定义实现槽
代码实例
1.Dialog1上定义、实现发射信号和槽
定义信号:signals:void dlgReturn(int,int); // 自定义信号
private slots: void on_pushButton_clicked();
实现信号发射:
void Dialog1::on_pushButton_clicked()
{
int value1 = ui->spinBox1->value(); // 获取输入的数值
int value2 = ui->spinBox2->value(); // 获取输入的数值
emit dlgReturn(value1,value2); // 发射信号
}
2.MainWindow定义槽、实现关联
定义槽: private slots:void showValue(int value1,int value2 );
private slots:void on_pushButton_clicked();
实现槽:
void MainWindow::showValue(int value1,int value2) // 自定义槽
{
ui->label1->setText(tr("获取的值是:%1").arg(value1));
ui->label2->setText(tr("获取的值是:%1").arg(value2));
}
实现关联:
void MainWindow::on_pushButton_clicked()
{
myDlg1 *dlg1 = new myDlg1(this);
connect(dlg1, &myDlg1::dlgReturn, this, &MainWindow::showValue);
dlg1->show();
Dlg2 *dlg2 = new Dlg2(this);
connect(dlg1, &myDlg1::dlgReturn, dlg2, &Dlg2::showValue);
dlg2->show();
}
3.Dialog2关联、槽
定义槽:
public slots:void showValue(int value1,int value2 );
实现槽:
void Dlg2::showValue(int value1,int value2) // 自定义槽
{
ui->label1->setText(tr("获取的值是:%1").arg(value1));
ui->label2->setText(tr("获取的值是:%1").arg(value2));
}