【问题标题】:Qt find out if QSpinBox was changed by userQt找出用户是否更改了QSpinBox
【发布时间】:2014-12-09 03:17:07
【问题描述】:

假设我有一个QSpinBox,我如何确定该值是从用户手动更改还是从其他函数更改的?

编辑:我只想在用户更改值时执行一些操作,但如果您的程序执行此操作 (setValue),我不想执行此操作。

【问题讨论】:

  • 我有一些解决方案,但您需要澄清一下。您是否只想在用户更改值时执行某些操作,但如果您在程序中执行(例如 setValue)您不想执行此操作。
  • 我看到了编辑,现在我可以发布我的答案了,请检查一下。

标签: c++ qt qspinbox


【解决方案1】:

可能的解决方案:

ui->spinBox->blockSignals(true);
ui->spinBox->setValue(50);
ui->spinBox->blockSignals(false);

在这种情况下,不会发出信号,所以你可以通过valueChanged() 信号捕捉到的只是用户的操作。

例如:

void MainWindow::on_spinBox_valueChanged(int arg1)
{
    qDebug() << "called";
}

当用户通过鼠标更改值或通过键盘输入时,您会看到"called",但是当您使用阻塞信号的setValue 时,您不会看到"called"

另一种方法是提供一些布尔变量并将其设置为truesetValue 之前并在槽中检查此变量。如果它是假的(用户操作) - 做一些动作,如果不是 - 不要做(将 bool 更改为假)。优点:不阻塞信号。缺点:可能代码难以阅读,如果 slot 调用多次,你会多次做这种不必要的检查。

【讨论】:

  • 很遗憾,输入相关的 QWidgets 通常没有用户与程序值设置的约定......
  • 这些天 QSignalBlocker 将是正确的方式(使用 RAII),而不是像您那样“包围”您的 setValue
猜你喜欢
  • 2011-09-11
  • 1970-01-01
  • 2015-08-17
  • 2016-08-24
  • 1970-01-01
  • 2011-07-30
  • 2011-10-14
  • 2013-04-24
  • 2023-04-07
相关资源
最近更新 更多