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