假设我有一个QSpinBox
,我如何才能确定该值是从用户手动更改还是从其他函数更改的?
编辑:我只想在用户更改值时执行一些操作,但如果您的程序执行此操作(setValue),我不想执行此操作。
可能的解决方案:
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"
。
另一种方法是提供一些 bool 变量并将其设置为在 slottrue
之前并检查此变量。setValue
如果它是假的(用户操作) - 做一些动作,如果不是 - 不要做(将 bool 更改为假)。优点:不阻塞信号。缺点:可能代码难以阅读,如果槽调用多次,你会多次做这种不必要的检查。