Qt выяснить, был ли пользователь QSpinBox изменен

Давайте предположим, что у меня есть QSpinBoxКак я могу узнать, если значение было изменено вручную от пользователя или из другой функции?

РЕДАКТИРОВАТЬ: Я хочу сделать некоторые действия только когда пользователь меняет значения, но если ваша программа делает это (setValue), я не хочу делать эти действия.

4

Решение

Возможное решение:

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). Преимущества: вы не блокируете сигнал. Недостатки: возможно, трудно читаемый код, если слот вызывает много раз, вы будете много раз делать эту ненужную проверку.

12

Другие решения


По вопросам рекламы [email protected]