Qt多信号链接一个槽函数时是查看是由哪个触发的

Qt多信号是查看是由哪个发出的

    • 问题描述
    • 解决办法

问题描述

我们可能会遇到这样一个问题,当有很多信号链接在同一个槽函数时,当执行槽函数时并不知道当前是谁触发了这个槽函数,此时我们需要用QObject::Sender()这个函数,在槽函数中查看触发该槽函数的Object指针,进而找出是谁触发的。

解决办法

语法:类名 *tmp = qobject_cast<类名 *>(sender());//类名为包含QObject的类
如:QCheckBox *Cbox = qobject_cast<QCheckBox *>(sender());
//Cbox便是当前触发的对象。

connect(tmp.checkBox,SIGNAL(stateChanged(int)),
            this,SLOT(checkBoxSlots(int)));
            
void Table::checkBoxSlots(int checkstate)
{
    QCheckBox *cbox = qobject_cast<QCheckBox *>(sender());
    if(cbox == nullptr)
    {
        return;
    }
    //找出在对应的tablerowmember中的位置
    ...
}
用法:在槽函数中应用上述语法

注意:如果是按钮类型的可以使用QButtonGroup,具体用法看手册。

参考:http://www.voidcn.com/article/p-xgjmpqgt-ev.html

你可能感兴趣的:(QT)