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

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

Сообщение Anonymous »

Я пытаюсь удалить предупреждения об устаревании в Qt v6.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;
}
}
Предупреждение в операторе switch гласит:

'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++»