Знайомство з juce: перша програма

Відео: Паскаль з нуля [ч1]. перша програма

Знайомство з Juce: перша програма
Для початку знайомства з Juce найзручніше згенерувати скелет мінімальної програми за допомогою «нового» Jucer. Запустимо його з extras / Jucer (experimental) / Builds / Linux / build. Виберемо File --gt; New Project ... і задамо тип Gui Application. Далі потрібно вибрати директорію для нового проекту. Неприємним глюком є те, що поки в поле File цього діалогу відображається ім`я поточної директорії (а воно з`являється там за замовчуванням), кнопка Open залишається недоступною. Тому, вибравши директорію, потрібно очистити поле File і натиснути Open. Далі задаємо ім`я проекту і вказуємо, що потрібно автоматично згенерувати Main.cpp і код для головного вікна. Наш скелетний код створений. У піддиректорії Builds містяться файли проектів для різних платформ, в тому числі і Makefile для Linux. У JuceLibraryCode поміщені файли, які посилаються на вихідні коди самої бібліотеки, а в Source - код нашої програми.

Перша компіляція може зайняти значний час, тому що компілюється по суті вся бібліотека, але наступні будуть проходити набагато швидше (див. рис. нижче).

Знайомство з Juce: перша програма
Створення нового проекту в Jucer

Для початку розберемося в створеному коді для основної програми Main.cpp. Без розлогих коментарів англійською він виглядає так:
#include ". ./JuceLibraryCode/JuceHeader.h"
class first _ programApplication: public JUCEApplication {public:
// Нічого не робіть в конструкторі і деструкції, // інакше все зламається! first _ programApplication () {} ~ first _ programApplication () {}
void initialise (const Strings commandLine) {// Вся ініціалізація повинна проходити тут
}
void shutdown () {
// А вся очищення тут
}
// Обробка системного запиту на завершення програми void systemRequestedQuit () {quit ();
}
// Неістотна частина коду опущена для стислості
};
// Цей макрос замінює функцію main
START _ JUCE _ APPLICATION (first _ programApplication)

В цілому, все повинно бути зрозуміло: ми успадковуємо базовий клас JUCEApplication і перевизначати методи для ініціалізації (initialise) і очищення (shutdown). У зв`язку зі специфікою дизайну бібліотеки в самому конструкторі і деструкції цього класу нічого робити не можна, про що попереджають коментарі. Метод systemRequestedQuit викликається тоді, коли програма отримує запит на закриття. Зокрема, він буде викликається при закритті головного вікна. Тут можна, наприклад, вивести попередження про незбережених даних. Кілька пропущених методів керують поведінкою при запуску декількох копій програми, і нам зараз не цікаві. Нарешті, ми передаємо наш клас макросу, який генерує функцію main і запускає цикл обробки подій.

Подивимося тепер на код головного вікна MainWindow.cpp:
#include "MainWindow.h"
MainAppWindow :: MainAppWindow (): DocumentWindow (
JUCEApplication:: getInstance () - gt; getApplicationName (),



Colours:: lightgrey, DocumentWindow:: allButtons)
{
centreWithSize (500, 400) - setVisible (true);
}
MainAppWindow:: ~ MainAppWindow () {}
void MainAppWindow :: closeButtonPressed () {
JUCEApplication:: getInstance () - gt; systemRequestedQuit ();
}

Клас головного вікна успадковується від DocumentWindow базова класу вікон в Juce. Ми відразу встановлюємо заго-спритний вікна, його колір і наявність кнопок мінімізації / закриття. В основній програмі ми не створювали екземпляр класу first_programApplication явно - це було зроблено автоматично всередині макросу. За допомогою статичного методу JUCEApplication :: getInstance () ми отримуємо посилання на цей екземпляр. У методі closeButtonPressed викликається метод основної програми systemRequestedQuit і запитується її закриття.

Легко помітити, що головне вікно не створюється при ініціалізації програми, тому вона поки що непрацездатна. Виправимо це:
class first _ programApplication: public JUCEApplication {public:
MainAppWindow * w;



void initialise (const Strings commandLine) {w = new MainAppWindow ();
}
void shutdown () {if (w) delete w;
}

Видно, що вікна (і все віджети) повинні створюватися динамічно, а їх знищення також знаходиться на совісті програміста. На щастя, для віджетів ситуація не настільки гнітюча, оскільки контейнери здатні самі видаляти нащадків, а ось про видалення вікон потрібно подбати.

Ми отримали просту працюючу програму на Juce, яка буде показувати порожнє сіре вікно, яке може згортатися і закриватися, але не може змінювати розмір. Додавши в конструктор MainAppWindow виклик setResizable (true, true), ми отримаємо і цю можливість.

додаємо віджети

У Juce можна малювати і розміщувати віджети не тільки в клієнтської області, а й на заголовку вікна, що, як правило, зовсім небажано. Тому для того, щоб додати в наше вікно якісь віджети, потрібно отримати доступ до клієнтської частини вікна. Спочатку потрібно створити віджет-контейнер і встановити його в клієнтську область:
// В оголошенні класу MainAppWindow
Component * content;
-;
// У конструкторі MainAppWindow
content = new Component () -
setContentComponent (content) -

Тепер в content можна додавати інші віджети. Додамо два вікна редагування і кнопку:
// В оголошенні класу
MainAppWindow TextButton * result-
TextEditor * editl-
TextEditor * edit2;
// У конструкторі
MainAppWindow result = new TextButton (T ( "Результат")) -
edit1 = new TextEditor () -
edit2 = new TextEditor ();

content-gt; addAndMakeVisible (result) -
content-gt; addAndMakeVisible (edit1) -
content-gt; addAndMakeVisible (edit2);

edit1-gt; setBounds (10, 10, 150, 20);
edit2-gt; setBounds (10, 50, 150, 20) -
result-gt; setBounds (10, 100, 150, 30)

Назва шрифту для використання методів інтуїтивно зрозумілі. Макрос Т (), як і в багатьох інших тулкіта, відповідає за інтернаціоналізацію додатки. Поки що від нього немає ніякої користі, але текстові константи, «загорнуті» в Т (), є хорошим стилем. Метод setBounds () задає положення, ширину і висоту віджета, а метод addAndMakeVisible () додає віджети в віджет-контейнер і відразу робить їх видимими.

Не будемо поки чіплятися до відверто непоказному увазі нашого вікна, а запитаємо себе, як обробити подія натискання на кнопку. Підхід, який використовується в Juce, досить оригінальний і не схожий на використовуваний в Qt або GTK +.



Ось і все, з Juce ми розібралися, а тепер давайте поговоримо про облік поштових відправлень (https://track-scanner.com/wiki/orders/). Виконання даного завдання слід довірити досвідченим фахівцям і професійного ПО. Track-Scanner.com, чия головна спеціалізація - інформаційна підтримка та захист інтернет магазинів, - ось ідеальний виконавець, який ідеально виконає поставлені вами перед ним завдання!

ІНШЕ

Juce: многопоточность фото

Juce: многопоточность

Нить в Juce реалізується класом Thread. Як і в багатьох інших тулкіта, це повністю віртуальний клас, наслідуючи який…

Ієрархія віджетів в u ++ фото

Ієрархія віджетів в u ++

Відео: Qt - Компонування віджетів 1 (для початківців) Важливо розуміти, що редактор компоновок не є повноцінним…

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

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

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

Juce: контейнери фото

Juce: контейнери

Відео: Batman Arkham City. Серія 16 [2-ий контейнер з титаном. глушилка] Найбільш загальним контейнерним класом в Juce…

Juce: враження і висновки фото

Juce: враження і висновки

Відео: Малайзійка на підлогу шишечки - NASTY Juice! Бібліотека Juce виробляє двояке враження. Багато її можливості…

Juce: вкладені компонування фото

Juce: вкладені компонування

вкладені компонування У Juce використовується ідеологія, розглянута в попередній статті по U ++, - ієрархія віджетів…

Використовуємо the jucer фото

Використовуємо the jucer

Відео: Соковижималка Novis Vitajuicer Візуальний редактор компоновок The Jucer Як ми вже переконалися, розміщувати…

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

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

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

» » Знайомство з juce: перша програма