Я узагальнюю декілька бібліотек графічного інтерфейсу, але на дуже високому рівні найважливіша концепція, яку вам потрібно зрозуміти, - це те, що графічний інтерфейс визначається подіями .
У консольній програмі введення користувача зазвичай відбувається в певні точки, які ви визначили. Ви спонукаєте свого користувача, ви чекаєте його введення, ви обчислюєте щось на основі цього входу. Однією з головних відмінностей є те, що введення відбувається лише в одному місці, ви читаєте текст з командного рядка ( stdin
на C ++).
У додатку GUI у вас зазвичай є кілька місць, де може відбуватися введення даних, наприклад кнопки, які виконують різні дії або текстові поля. Ось тут починають грати події. Наприклад, натискання кнопки запускає подію. Цією подією повинен займатися обробник подій , який, як правило, є лише методом, який приймає об'єкт події , який викликається, коли таке парне запускається. Як ваша кнопка знає про обробник подій? Зазвичай ви підписуєтесь (або слухаєте її).
Ось приклад "натхненний C ++", це не фактичний код QT або C ++.
class MyClickHandler : public ClickListener{
void clickHandler(ClickEvent e){
showAlertBox("The button "+e.getSource().getName()+" has been clicked");
}
};
Створюючи кнопку, ви реєструєте екземпляр класу MyClickHandler проти кнопки.
...
MyClickHandler handler();
Button b("Save");
b.registerListener(handler);
...
Тепер при кожному b
натисканні кнопки з'являється вікно з повідомленням, що "натиснути кнопку" Зберегти ".
Можна уявити, що додаток GUI має два етапи:
- Встановіть графічний інтерфейс: короткий період при запуску, де всі об’єкти створюються та з'єднуються між собою.
- Цикл подій : Ваш графічний інтерфейс знаходиться в одному великому циклі, а просто сидить там на холостому ходу, поки подія не запускається.
Це дуже простий приклад, але я б рекомендував у будь-якій структурі, яку ви вибрали, спробуйте показати поле з повідомленням, коли натискаєте кнопку.
У рамках їх там дуже багато: У випадку C ++ я б, напевно, рекомендував Qt.
Останнє слово поради: тримайтеся подалі від дизайнерів GUI, поки ви дійсно не дізнаєтесь, що відбувається на задньому плані. Не так складно написати кілька простих прикладів і спершу зрозуміти цикл подій, а потім перейти до більш складних макетів.