如何仅在用户更改值时调用 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();
}
});
这是我的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();
}
});