假设我有一个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 变量并将其设置为true
之前setValue
并检查槽中的这个变量。如果为 false(用户操作) - 执行某些操作,如果不是 - 不执行(将 bool 更改为 false)。优点:不阻塞信号。缺点:可能是难以阅读的代码,如果插槽调用多次,您将很多时候进行这种不必要的检查。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)