Qt查明用户是否更改了QSpinBox

Mat*_*ias 5 c++ qt qspinbox

假设我有一个QSpinBox,如何从用户或其他函数手动更改值?

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

Che*_*byl 12

可能的方法:

ui->spinBox->blockSignals(true);
ui->spinBox->setValue(50);
ui->spinBox->blockSignals(false);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,信号不会被发出,所以你可以通过valueChanged()信号捕获的只是用户的动作.

例如:

void MainWindow::on_spinBox_valueChanged(int arg1)
{
    qDebug() << "called";
}
Run Code Online (Sandbox Code Playgroud)

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

另一种方法是提供一些bool变量并将其设置为true之前setValue并在槽中检查此变量.如果是假(用户操作) - 执行某些操作,如果不是 - 请不要执行操作(将bool更改为false).优点:你不会阻挡信号.缺点:可能是硬读代码,如果插槽调用很多次,你会多次进行不必要的检查.

  • 令人遗憾的是,输入相关的 QWidget 通常没有用户与程序值设置的约定...... (3认同)
  • 如今,“QSignalBlocker”将是正确的方法(使用 RAII),而不是像您那样“包围”您的“setValue”。 (2认同)