- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
void MyWindow::OkButtonClicked()
{
if((!cb1->isChecked()) && (!cb2->isChecked()))
emit Simple(line->text());
if((cb1->isChecked()) && (!cb2->isChecked()))
emit Register(line->text());
if((!cb1->isChecked()) && (cb2->isChecked()))
emit Invers(line->text());
if((cb1->isChecked()) && (cb2->isChecked()))
emit RegVers(line->text());
}
Gerchicov-bp 05.05.2015 10:23 # 0
typedef enum {
val1 = 0,
val2,
val3,
val4} Values;
в методе:
Values valueCombination = val1;
if (cb1->isChecked()) valueCombination += 1;
if (cb2->isChecked()) valueCombination += 2; //или другие ваши способы получить комбинацию значений
switch(valueCombination) {
... //перебор всех значений enum вместо много раз if со сложными условиями
}
Dummy00001 05.05.2015 10:33 # −1
тут либо концепция кривая, либо надо просто if/else'ами сделать. более чем на 2 чекбокса это все равно не скалируется. если надо третий чекбокс - то концепция говно. если двух хватает - то лучше чем простой if/else не придумаешь.
и если концепция говно - то надо начинать в сторону радиобуттонов или дроплиста думать.
Gerchicov-bp 05.05.2015 11:15 # 0
if (cb3->isChecked()) valueCombination += 4;
я пишу +=, но да, обычно битовые сдвиги записывают по-другому.
Концепция говно? Ну так весь OpenGL по-вашему построенный на этой концепции - тоже говно? Там для того, чтобы в одну переменную запихнуть несколько значений используется вертикальная палка
Dummy00001 05.05.2015 11:47 # +1
и еще 2x строчек в switch/case.
> Ну так весь OpenGL по-вашему построенный на этой концепции - тоже говно?
Я нигде ни разу не обобщал это на все использования битовых флагов.
> Концепция говно?
Да, говно: когда народ пытается 2-3 чекбоксами выразить хез какие концепции, которые никакого непосредственной связи с чекбоксами не имеют. Потому что чекбокс это просто бул переменная. Выбор "один из нескольких" - это очевидно либо радиобуттоны, либо дроплист.
codemonkey 05.05.2015 12:04 # 0
Мне одному кажется, что так проще?
kegdan 05.05.2015 13:50 # 0
Gerchicov-bp 05.05.2015 15:45 # 0
1024-- 05.05.2015 15:59 # +1
Помогут либо typedefs, либо шаблоны. Либо смена языка.
TarasB 05.05.2015 16:18 # 0
Тогда будет
1024-- 05.05.2015 16:40 # 0
Заодно, используя шаблонные функции, можно будет некоторые аргументы-типы писать как параметры шаблона, а некоторые - преобразовывать к значениям и передавать как обычные аргументы.
Набросок (интуитивный):
А дальше #define of /