如何仅在用户更改值时调用 QSpinBox 的 changeValue

How to call changeValue of QSpinBox only when user changed value

这是我的QSpinBox插槽方法:

void MainWindow::on_sbObjectSize_valueChanged(int arg1)
{
     /*do something*/;
}

我需要区分此值何时被用户更改(通过键入值或单击箭头)以及何时从代码更改(例如使用 ui->sbObjectSize->setValue(1))。
是否可以通过重载某些东西、制作自己的 slot/signal 或任何其他方式来做到这一点?

是的,您可以通过检查从 sender() 返回的值来完成。假设您在主 window 中的 UI 中有一个按钮,单击该按钮会更改旋转框的值,那么 sender() 的值将是按钮指针的地址。 qDebug() 非常好,因为它会通过可用的元数据输出 QObject 中可用的其他信息。例如你可以给你的 QObject 一个名字,然后 qDebug() 会输出那个名字。

这是一个代码片段:

ui->pushButton->setObjectName("Button1");
connect(ui->pushButton, &QPushButton::clicked, [this] {
    ui->sbObjectSize->setValue(ui->sbObjectSize->value()+1);
});

connect(ui->sbObjectSize, QOverload<int>::of(&QSpinBox::valueChanged), [=] (int value) {
    //based on what this prints, you can write your code so that you can check
    qDebug()  << sender();
    if (sender() == nullptr) {
        qDebug() << "Value changed by via the spin box itself";
    } else {
        qDebug() << "Value changed by: " << sender();
    }
});