Russian Qt Forum

Qt => Вопросы новичков => Тема начата: ammaximus от Март 22, 2013, 00:19



Название: Флаги, Сложение Qt::Modifiers
Отправлено: ammaximus от Март 22, 2013, 00:19
Чет никак не соображу как пользовать флагами, в частности подмножеством modifiers. Известен такой метод:
Код:
		case Qt::Key_S:
if(keyEvent->modifiers() & Qt::ControlModifier)
{
str = "MS";
}

Не оч понятно почему именно так. Мне нужно добица Ctrl+Alt. Тут надо добавить энд еще это понятно, а можно ли сделать это в рамках switch? Мне нужно перебрать все комбинации модификаторов, иф-елс будет неуклюже.


Название: Re: Флаги, Сложение Qt::Modifiers
Отправлено: kambala от Март 22, 2013, 02:07
по идее так
Код
C++ (Qt)
switch (keyEvent->modifiers())
{
case Qt::ControlModifier | Qt::AltModifier:
   // Ctrl+Alt
   break;
}


Название: Re: Флаги, Сложение Qt::Modifiers
Отправлено: ammaximus от Март 23, 2013, 13:23
у меня так как раз и не работает, поэтому спрашиваю.
Код:
calls to overloaded operators cannot appear in a constant-expression


Название: Re: Флаги, Сложение Qt::Modifiers
Отправлено: kambala от Март 23, 2013, 13:55
ну введи целочисленную константу, которой и присвой это значение


Название: Re: Флаги, Сложение Qt::Modifiers
Отправлено: ammaximus от Март 23, 2013, 14:07
Код:
const int CtrlAlt = Qt::ControlModifier | Qt::AltModifier;

case CtrlAlt:
[code]

Тоже самое cannot appear
[/code]


Название: Re: Флаги, Сложение Qt::Modifiers
Отправлено: carrygun от Март 23, 2013, 17:07
Так нельзя. Используйте enum'ы или тупое сравнение через if'ы.