QSignalMapper 信号转发器

来源:互联网 发布:模拟科目三练车软件 编辑:程序博客网 时间:2024/05/16 12:09
当类似的控件(eg btn)需连接类似的信号槽时,如果写n个connect与n个信号槽函数太麻烦了,此时便用到了QSignalMapper.先举一个项目中用到的例子: QSignalMapper* pSignalMapperRotate = new QSignalMapper(this);for (int i = 0; i < AdjustRotate_Btn_Count; ++i){    bConnect = connect(m_pBtnAdjustRotate[i], SIGNAL(clicked()), pSignalMapperRotate, SLOT(map()));    Q_ASSERT(bConnect);    pSignalMapperRotate->setMapping(m_pBtnAdjustRotate[i], i/* + 1*/);}bConnect = connect(pSignalMapperRotate, SIGNAL(mapped(int)), this, SLOT(SlotAdjustRotateBtnsClicked(int)));Q_ASSERT(bConnect);

槽函数为:
void DxTreatedToNontreatedFineTunePanel::SlotAdjustRotateBtnsClicked(int nId)
{
DxLOG_FUNC_TRACE();
FineTuneXYZType eFineTuneXYZType = e_Unknown_FineTuneXYZ;
if (Btn_X_AdjustRotate == nId)
{
eFineTuneXYZType = e_X_FineTuneXYZ;
}
else if (Btn_Y_AdjustRotate == nId)
{
eFineTuneXYZType = e_Y_FineTuneXYZ;
}
else if (Btn_Z_AdjustRotate == nId)
{
eFineTuneXYZType = e_Z_FineTuneXYZ;
}
else if (Btn_X_Anti_AdjustRotate == nId)
{
eFineTuneXYZType = e_X_Anti_FineTuneXYZ;
}
QString strValue = m_pLineEditAdjustValue->text();
double dCurEditAdjustValue = dZero;
dCurEditAdjustValue = strValue.toDouble();
m_pFineTuneModel->SetFineTuneValue(dCurEditAdjustValue);
m_pFineTuneModel->SetFineTuneXYZType(eFineTuneXYZType);
}
理解:
QSignlMapper的作用是整体的作用是通过一个无参的信号转化成有参的信号,然后传给槽函数进行操作
两个connect,一个setMapping是必须的
QSignalMapper* pSignalMapperRotate = new QSignalMapper(this);有一次实例化的时候,没有指定parent,造成了内存泄漏

0 0