【问题标题】:QSlider setvalue() not updating slider position in GUIQSlider setvalue() 不更新 GUI 中的滑块位置
【发布时间】:2019-08-29 04:07:15
【问题描述】:

我的主窗口中有多个滑块小部件,使用 QT 创建器添加,我正在尝试在我的程序中设置滑块位置,滑块值是根据从颜色选择器对话框中选择的颜色 (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 更新滑块小部件?

【问题讨论】:

  • 代码看起来没问题,通常不需要repaintprocessEvents。您能否提供一个可验证的示例:stackoverflow.com/help/mcve
  • 我同意,这段代码应该可以工作,不需要 repaint() 或事件处理,假设事件循环正常运行(例如,你调用了 QApplication::exec())
  • 我无法在此处发布整个代码,我将尝试通过将有问题的代码移至新项目来重现该问题。我是 QT 新手,我以为我遗漏了一些东西。
  • 如果我将 ccfg 分配给临时对象并且如果我使用临时对象成员来设置滑块值,它的工作原理。有趣的是,如果我记录要调试的值,成员值与始终返回的对话框相同。
  • 你有想过这个吗?

标签: qt user-interface


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-08
    • 2012-06-23
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 2017-02-26
    • 2013-01-07
    • 1970-01-01
    相关资源
    最近更新 更多