Предупреждения об устаревании: в случае (Qt::Key_A | Qt::SHIFT):C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Предупреждения об устаревании: в случае (Qt::Key_A | Qt::SHIFT):

Сообщение Anonymous »

Я пытаюсь удалить предупреждение об устаревании в Qt версии 6.10, MinGW в Windows 11. Я получаю предупреждения по этому коду (такие переменные, как spdVal, ssss, определены в коде над этими строками):

Код: Выделить всё

void
acquireDataDlg::adjustErgoSettings(QKeyCombination key, short ergo)
{
...... // local variables defined in top section
switch(key)
{
case (Qt::Key_A | Qt::ShiftModifier):
spdVal= (spdVal < 10 * ssss) ? 0.0 : (spdVal - 10 * ssss);
break;
case(Qt::Key_S | Qt::SHIFT):
spdVal+= 10 * ssss;
break;
default:
errOut=true;
break;
}
}

Предупреждение в операторе переключения гласит: «constexpr QKeyCombination::operator int() const» устарело. Используйте QKeyCombination вместо int.
Поэтому я изменил эту строку на

Код: Выделить всё

switch(key.toCombined())
и это устранило это предупреждение.
Но у меня все еще есть предупреждения о операторах case с комбинированным ключом + модификатором.
Я попробовал case (Qt::Key_A | Qt::ShiftModifier).tocombined(): то же предупреждение.
Я попробовал создать переменные, которые я мог бы использовать в операторах Case (у меня есть #include в верхней части код...)

Код: Выделить всё

  QKeyCombination keyA_keyShift = QKeyCombination(Qt::Key_A,Qt::ShiftModifier);
QKeyCombination keyS_keyShift = QKeyCombination(Qt::Key_S,Qt::ShiftModifier);
Но они выдали ошибки, указывающие на то, что конструктор принимает только один аргумент. В документации четко указано, что может потребоваться два модификатора: Qt::Key или Qt::KeyboardModifiers в любом порядке!
Я обратился к Gemini за помощью, и он предложил структуру кода, которая выглядит следующим образом:

Код: Выделить всё

auto combination = event->keyCombination();
switch (combination.toCombined()) {
case (Qt::ControlModifier | Qt::Key_S).toCombined():
// Save action
break;
case (Qt::ControlModifier | Qt::Key_O).toCombined():
// Open action
break;
}
Но это тоже не работает, подобные предупреждения.
Я пробовал использовать серию операторов if, безрезультатно:

Код: Выделить всё

      if (key.toCombined()==(Qt::Key_A | Qt::ShiftModifier)){
spdVal= (spdVal < 10 * ssss) ? 0.0 : (spdVal - 10 * ssss);
} else if (key.toCombined()==(Qt::Key_S | Qt::ShiftModifier)){
spdVal+= 10 * ssss;
}
Я явно что-то упускаю. Может ли кто-нибудь предложить исправление?

Подробнее здесь: https://stackoverflow.com/questions/798 ... -a-qtshift
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»