Qt查明用户是否更改了QSpinBox

时间:2014-10-14 10:48:04

标签: c++ qt qspinbox

假设我有一个QSpinBox,我怎么能知道这个值是从用户还是从其他函数手动更改的?

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

1 个答案:

答案 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)。优点:你不会阻止信号。缺点:可能是难以读取的代码,如果插槽调用很多次,您将花费很多时间进行不必要的检查。