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

时间:2016-02-18 17:18:47

标签: qt user-interface

我的主窗口中有多个滑块小部件,使用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()之后强制UI更新滑块小部件?

1 个答案:

答案 0 :(得分:0)

确保不更新valueChanged插槽功能中的ccfg.mxxx值。