Qt QSlider setvalue()不更新GUI中的滑块位置

Qt QSlider setvalue()不更新GUI中的滑块位置,qt,user-interface,Qt,User Interface,我的主窗口中有多个滑块小部件,使用QT creater添加,我试图在程序中设置滑块位置,滑块值是根据从颜色选择器对话框中拾取的颜色(HSV)设置的 我有一个颜色按钮,单击颜色按钮后,它会调用颜色选择器对话框,在拾取颜色后,它会调用updateSlider()来设置滑块位置 void MainWindow::on_Color_clicked() { QColor color = QColorDialog::getColor(Qt::white); int h,s,v; co

我的主窗口中有多个滑块小部件,使用QT creater添加,我试图在程序中设置滑块位置,滑块值是根据从颜色选择器对话框中拾取的颜色(HSV)设置的

我有一个颜色按钮,单击颜色按钮后,它会调用颜色选择器对话框,在拾取颜色后,它会调用
updateSlider()
来设置滑块位置

void MainWindow::on_Color_clicked()
{
    QColor color = QColorDialog::getColor(Qt::white);
    int h,s,v;
    color.getHsv(&h,&s,&v);
    h = h/2;
    ccfg.mHueL     = h;
    ccfg.mHueH     = h;
    ccfg.mSatL     = s;
    ccfg.mSatH     = s;
    ccfg.mValueL   = v;
    ccfg.mValueH   = v;
    updateSlider();
}

void MainWindow::updateSlider()
{
    ui->hueL->setValue(ccfg.mHueL);
    ui->hueH->setValue(ccfg.mHueH);
    ui->satL->setValue(ccfg.mSatL);
    ui->satH->setValue(ccfg.mSatH);
    ui->valL->setValue(ccfg.mValueL);
    ui->valH->setValue(ccfg.mValueH);
    ui->thrED->setValue(ccfg.mThrEd);
    ui->thrCD->setValue(ccfg.mThrCd);
    ui->minR->setValue(ccfg.mMinR);
}
选择颜色后,只更新第一个滑块,为什么其他滑块位置不更新

如果我再次选择相同的颜色,UI中的第二个滑块位置将更新为新值,如果我选择9次,则所有滑块位置都将正确设置


我尝试调用主窗口和小部件的
repaint()
,也尝试调用
processEvents()。有没有办法强制用户界面在
setValue()
之后更新滑块小部件

确保没有在valueChanged插槽函数中更新ccfg.mxxx值。

确保没有在valueChanged插槽函数中更新ccfg.mxxx值。

代码看起来正常,通常不需要为此而
重新绘制
处理事件
。你能提供一个可验证的例子吗:我同意,这段代码应该可以运行,不需要重新绘制()或事件处理,假设事件循环正常运行(例如,你调用QApplication::exec()),我将无法在这里发布整个代码,我将尝试通过将有问题的代码移动到一个新项目来重现问题。我对QT是新手,我以为我遗漏了什么。这似乎是一个线程安全问题(有另一个线程刚刚读取这个对象,我认为这不是问题),如果我将ccfg分配给一个临时对象,如果我使用临时对象成员来设置滑块值,它起作用了。有趣的是,如果我记录要调试的值,则成员值始终与返回的对话框相同。您是否解决了这个问题?代码看起来正常,通常您不需要为此重新绘制
processEvents
。你能提供一个可验证的例子吗:我同意,这段代码应该可以运行,不需要重新绘制()或事件处理,假设事件循环正常运行(例如,你调用QApplication::exec()),我将无法在这里发布整个代码,我将尝试通过将有问题的代码移动到一个新项目来重现问题。我对QT是新手,我以为我遗漏了什么。这似乎是一个线程安全问题(有另一个线程刚刚读取这个对象,我认为这不是问题),如果我将ccfg分配给一个临时对象,如果我使用临时对象成员来设置滑块值,它起作用了。有趣的是,如果我记录要调试的值,则成员的值始终与返回的对话框相同。您知道这一点吗?