假设我有一个QSpinBox
,我怎么能知道这个值是从用户还是从其他函数手动更改的?
编辑:我只想在用户更改值时执行某些操作,但如果您的程序执行此操作(setValue),我不想执行此操作。
答案 0 :(得分:12)
可能的解决方案:
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
并在插槽中检查此变量。如果它是假的(用户操作) - 做一些动作,如果不是 - 不要做(将bool改为false)。优点:你不会阻止信号。缺点:可能是难以读取的代码,如果插槽调用很多次,您将花费很多时间进行不必要的检查。