Qslider报告Valuechanged的不正确值()

发布于 2025-02-06 09:08:22 字数 1066 浏览 1 评论 0原文

我正在尝试将QSlider对象连接到qlineedit,以使用户能够使用滑块或直接输入指定值或直接输入为表单。这里的目标是,当滑块位置更改时,我们在Qlineedit box中更新文本,反之亦然。但是,当我尝试报告qslider-> valuechanged()的值时,无论将滑块位置设置在何处,我都会恢复1个值。我在做什么错误?

这是我的MWE :(

    QSlider* decay_slider = new QSlider(Qt::Horizontal, this);
    decay_slider->setMinimum(1);
    decay_slider->setMaximum(11000); // increments of 0.1 years
    decay_slider->setTickPosition(QSlider::TicksBothSides);

    QLineEdit* le_decay_time = new QLineEdit(this);
    
    // Map slider position signal to LineEdit text update
    QSignalMapper* mapper = new QSignalMapper(this);
    QObject::connect(mapper,
                     SIGNAL(mapped(const QString&)),
                     le_decay_time,
                     SLOT(setText(const QString&)));
    QObject::connect(decay_slider, SIGNAL(valueChanged(int)), mapper, SLOT(map()));
    mapper->setMapping(decay_slider,
          QString::number(decay_slider->sliderPosition()));

这是QT-5.15,如果很重要。)

I'm trying to connect a QSlider object to a QLineEdit such to enable a user to either specify a value using the slider or direct input into a form. The goal here is when the slider position changes, we update the text in the QLineEdit box and vice versa. However, when I try to report out the value of QSlider->valueChanged(), I'm just getting back a value of 1, regardless of where the slider position is set to. What am I doing incorrectly?

Here is my MWE:

    QSlider* decay_slider = new QSlider(Qt::Horizontal, this);
    decay_slider->setMinimum(1);
    decay_slider->setMaximum(11000); // increments of 0.1 years
    decay_slider->setTickPosition(QSlider::TicksBothSides);

    QLineEdit* le_decay_time = new QLineEdit(this);
    
    // Map slider position signal to LineEdit text update
    QSignalMapper* mapper = new QSignalMapper(this);
    QObject::connect(mapper,
                     SIGNAL(mapped(const QString&)),
                     le_decay_time,
                     SLOT(setText(const QString&)));
    QObject::connect(decay_slider, SIGNAL(valueChanged(int)), mapper, SLOT(map()));
    mapper->setMapping(decay_slider,
          QString::number(decay_slider->sliderPosition()));

(This is Qt-5.15, if it matters.)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

森林迷了鹿 2025-02-13 09:08:23

您调用setMapping硬编码sliderPosition的值。

好东西,我们现在有Lambdas,因此您可以用以下方式替换整个第二段

QObject::connect(decay_slider, &QSlider::valueChanged, le_decay_time,
  [=](int value) { le_decay_time->setText(QString::number(value)); });

Your call to setMapping hard-codes the value of sliderPosition to the initial version.

Good thing we have lambdas now, so you can replace the entire second paragraph with:

QObject::connect(decay_slider, &QSlider::valueChanged, le_decay_time,
  [=](int value) { le_decay_time->setText(QString::number(value)); });
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文