问:模型更改时如何更新GUI?

时间:2012-06-20 08:14:20

标签: qt signals-slots updates

我在GUI中使用复选框来切换控制通过信号/插槽连接的机器的类中的位。

我还需要相反的方向,因为如果机器的某些命令切换相同的位,我的GUI应该反映出这些变化。

我的问题是: 单击该复选框时,发送信号时其状态尚未更新。 因此第一个信号到达机器,位被切换,机器响应第二个信号并到达GUI处理程序方法'updateCheckBoxXYZ'。 现在我想知道是否需要更新复选框。

如果整个链由用户启动,则复选框将最后自动更新。 如果内部命令直接切换该位,则需要选中该复选框以反映内部更改。

由于尚未检查复选框,我不能要求'isChecked()'。

我怎么办才能不陷入无尽的循环?

更新 我刚试过类似下面的代码:

// slot called by toggled(bool)

void DialogXY::checkBoxXYChanged(bool bState)
{
    if (bState != m_bGuiStateXY)
    {
        m_bGuiStateXY = bState; 
        emit GuiXYChanged(bState);
        // optional: .. do some GUI related things ..
    }
}


// slot called on signal 'GuiXYChanged(bState)'

void Machine::changeXY(int iModul, bool bState)
{
    if (bState != m_bMachineStateXY)
    {
        emit MachineXYChanged(bState);
    }
    // .. change machine configuration ..
}


// slot called on signal 'MachineXYChanged(bState)'

void DialogXY::updateCheckBoxXY(bool bState)
{    
    if (bState != m_bStateXY)
    {
        ui.checkBoxXY->setChecked(bState);
        // will signal toggled()
    }
}

但我需要为每个GUI项添加额外的变量, 我必须正确初始化等等。

我更喜欢更优雅的东西。

0 个答案:

没有答案