QT 在槽函数中获取发出信号的控件名称

311 阅读1分钟

举一个例子,多个QComboBox控件的currentIndexChanged信号绑定同一个槽函数,在槽函数中怎么区分信号是哪一个控件发生的,这里不是按钮,所以用不了按钮组那种方式来辨别控件,解决方式:

1,使用sender()函数来获取发出信号的对象的指针

2,使用qobject_cast<QComboBox*>(sender())获取对应的QComboBox控件指针

这样就区分开来了,示例:

const QStringList CenStaComboxs = 
        {"CenSta11_combox2","CenSta12_combox2","CenSta13_combox2","CenSta14_combox2",
        "CenSta21_combox2","CenSta22_combox2","CenSta23_combox2","CenSta24_combox2"};

foreach (QString csc, CenStaComboxs) {
        QComboBox *cbbTemp = this->findChild<QComboBox *>(csc);
        connect(cbbTemp, QOverload<int>::of(&QComboBox::currentIndexChanged),this,             
                &MainWindow::on_CenStaXX_combox2_currentIndexChanged);
}

//槽函数
void MainWindow::on_CenStaXX_combox2_currentIndexChanged(int index)
{
    QComboBox* comboBox = qobject_cast<QComboBox*>(sender());

    qDebug()<<comboBox -> objectName();
}

其他类型的控件类似处理,qobject_cast<[控件类型]>(sender())。