Qt:添加到布局的视图未更新,但不在布局中时将更新

Qt:添加到布局的视图未更新,但不在布局中时将更新,qt,model-view-controller,layout,Qt,Model View Controller,Layout,当从相应的模型发送信号时,称为转速表的小部件将相应地更新,但当我将小部件添加到布局中时,它根本不会响应。这可能是什么原因?在不显示模型或视图的内部(这将是详尽的)的情况下,我将尝试指出它不起作用的地方: void MainWindow::setupWidgets() { QHBoxLayout *horiz1 = new QHBoxLayout(); QHBoxLayout *horiz2 = new QHBoxLayout(); odometer = new Odome

当从相应的模型发送信号时,称为转速表的小部件将相应地更新,但当我将小部件添加到布局中时,它根本不会响应。这可能是什么原因?在不显示模型或视图的内部(这将是详尽的)的情况下,我将尝试指出它不起作用的地方:

void MainWindow::setupWidgets()
{
    QHBoxLayout *horiz1 = new QHBoxLayout();
    QHBoxLayout *horiz2 = new QHBoxLayout();
    odometer = new Odometer(ui->dashFrame);
    fuelGauge = new FuelGauge(ui->dashFrame);
    tripometer = new Tripometer(ui->dashFrame);
    tachometer = new Tachometer(ui->dashFrame);
    temperatureGauge = new TemperatureGauge(ui->dashFrame);
    oilPressureGauge = new OilPressureGauge();
    QVBoxLayout *vertOPG = new QVBoxLayout();

    if ( oilPressureGauge->getTitle() != "" )
    {
        QLabel *OPGLabel = new QLabel(oilPressureGauge->getTitle());
        vertOPG->addWidget(OPGLabel);
    }
    vertOPG->addWidget(oilPressureGauge);

    speedometer = new Speedometer(ui->dashFrame);
    horiz1->addWidget(tachometer);
    horiz1->addWidget(speedometer);
    horiz2->addWidget(fuelGauge);
    horiz2->addWidget(temperatureGauge);
    horiz2->addLayout(vertOPG);
    horiz2->addWidget(tripometer);
    horiz2->addWidget(odometer); // will NOT update when added to layout
    QVBoxLayout *vert1 = new QVBoxLayout(ui->dashFrame);
    vert1->addLayout(horiz1);
    vert1->addLayout(horiz2);
    this->ui->dashFrame->setLayout(vert1);
}
我感到困惑的是,其他小部件将按照预期进行更新,而不是名为tachometer的对象。如前所述,如果我不将其添加到布局中,例如

// ...
tachometer = new Tachometer(ui->dashFrame);
// ...
它似乎工作得很好。此外,通过在控制台上进行调试,我看到转速表的RPM值被发送到更新转速表视图的相应插槽(我刚刚注意到转速表最终响应了更新,但它并没有像应该的那样在每次超时后更新)。这里显然涉及到一些延迟问题。
如果有人知道为什么会这样,我将非常感谢您的澄清。

您如何在
转速表中显示新数据?我的意思是,你们怎么画它?转速表的显示方式类似于模拟时钟。我对转速表和车速表使用相同的小部件显示,但根据小部件的不同,使用策略模式在表面上绘制不同的值。视图在每毫秒后输入一个值。。。正如我前面提到的,当我将小部件添加到布局中时,它似乎不会更新(但其他小部件的性能似乎很好)?他们是干什么的?它们如何以及在何处连接到信号?paintEvent是如何实现的?paintEvent是否正确执行?paintEvent是否使用最新数据?尝试在每次更新时强制重新绘制()小部件。谢谢。我尝试简单地调用小部件上的update()方法,在发送信号以使用正确的值进行更新后,强制小部件重新绘制。这解决了问题,现在小部件正在绘制。当它没有分配给布局时,这种行为是不必要的,我认为这很奇怪。