Нестандартні gui-тулкіта: магія ultimate ++

Нестандартні GUI-тулкіта: Магія Ultimate ++
Нарешті ми підійшли до реалізації логіки програми. Спочатку напишемо функцію, яка буде викликатися при натисканні на кнопці:
void on _ click () {
double vl = ~ vall, v2 = ~ val2- if (IsNull (v1) || IsNull (v2)) {
result.SetLabel ( "Введіть два числа!");
return;
}
switch ((-operation) .ToString () [0]) {case `+`:
result.SetLabel (String ( "Результат:") .Cat () lt; lt; vl + v2) - break- case
result.SetLabel (String ( "Результат:") .Cat () lt; lt; vl - v2) - break- case `*`:
result.SetLabel (String ( "Результат:") .Cat () lt; lt; vl * v2) - break- case `/`:
result.SetLabel (String ( "Результат:") .Cat () lt; lt; vl / v2) - break;



}
}

У цьому невеликому фрагменті коду добре видно «магія» U ++. У будь-якого віджета в U ++ є якесь «природне значення». Це стосується навіть до віджетів, які не зберігають даних, таким як кнопки. Для поля введення природне значення - це введений текст, для списку - обраний елемент, для кнопки -функція-обробник її натискання. Отримати це значення можна оператором «значення = ~ widget», а встановити - оператором «widget lt; lt; = значення ». Оператор «~» повертає значення типу Value. Value - це варіантний тип, який може зберігати числа, дати, рядки і інші значення і використовується як універсальна «валюта» для перетворення значень. При присвоєнні «double vl = ~ val1» з поля введення val1 витягується рядок у вигляді вариантного типу і автоматично перетворюється неявно в число.




Якщо поле введення - пусте, конвертація в число оператором «~» все одно проходить без помилки. Справа в тому, що змінна будь-якого типу (навіть примітивного, на кшталт double або int) в U ++ може бути «порожній» (Null). Перевірка на «порожнечу» проводиться функцією IsNull () і дозволяє елементарно обробляти випадки коли конвертація неможлива.

Конструкція «(~ operation) .ToString () [0]» витягує поточний елемент зі списку операцій, явно перетворює його в рядок (в цьому випадку компілятор просто нізвідки витягти інформацію про тип для неявного перетворення типу Value) і витягує перший символ, за яким і йде вибір операції в блоці switch. Будь-яка рядок в U ++ має тип String, а за допомогою методу Cat () і оператора «lt; lt;» в неї можна записувати значення різних типів, в тому числі і числа.

Отже, функція-обробник готова, залишилося тільки зіставити її події клацання на кнопці. Робиться це дуже просто. Перед конструктором вставляємо рядок:
typedef MyWindow CLASSNAME-

Тип CLASSNAME використовується макросами U ++ для генерації правильного коду прив`язок (bindings) до подій. Потім просто пишемо в конструкторі:
compute lt; lt; = THISBACK (on _ click) -

Макрос THISBACK створює об`єкт-прив`язку з нашої функції-обробника. Цей об`єкт встановлюється як «природне значення» кнопки compute. Якщо ми тепер захочемо автоматично перераховувати результат при виборі іншої операції зі списку достатньо написати за аналогією:
operation lt; lt; = THISBACK (on _ click) -

і все запрацює без необхідності навіть знати назву події генерується списком при виборі елемента! Таке однаковість і універсальність вигідно відрізняє U ++ від інших тулкіта, де для з`єднання події з обробником потрібно знати назву подій для кожного віджета і їх повні сигнатури. Запустивши готову програму, ми побачимо вікно, показане на рис. нижче.

Нестандартні GUI-тулкіта: Магія Ultimate ++
Вікно готової програми


ІНШЕ

Обробка подій в juce фото

Обробка подій в juce

Відео: Уроки javascript | Урок №13 - Події і обробник подій Переважна більшість тулкіта для С ++ (Gtk +, Qt,…

Ultimate ++: схеми баз даних фото

Ultimate ++: схеми баз даних

Відео: Бази даних, лекція №1 (2013) Об`єкти SqlExp кардинально полегшують створення запитів, але створення самих…

Мова програмування vala фото

Мова програмування vala

Hello world! Розгляд будь-якої мови програмування традиційно належить починати з найпростішої програми «Hello…

Ultimate ++: перша програма фото

Ultimate ++: перша програма

Відео: Уроки C # (C sharp) | # 3 - Перша програма на C # Перейдемо до реального прикладу. Напишемо просту марну…

Неясності з phonon фото

Неясності з phonon

Від труднощів збірки перейдемо до неясним місцях у використанні Phonon. Phonon підтримує ті мультимедійні формати, які…

Взаємодія chaiscript з c ++ фото

Взаємодія chaiscript з c ++

Відео: Jason Turner: Why and How To Add ScriptingІдеологія взаємодії ChaiScript і С ++ Скриптова мова ChaiScript…

» » Нестандартні gui-тулкіта: магія ultimate ++