mafulechka
mafulechka16 вересня 2020 р. 05:31

Qt Design Studio - посібник з Sketch Bridge, частина 2

Ласкаво просимо до другої частини керівництва по Sketch Bridge для Qt Design Studio. Наприкінці першої частини ви створили першу кнопку і змусили її працювати в різних станах Qt Design Studio (в решті керівництва буде скорочено qds). У цій частині повернемося назад і створимо компонент меню з екземплярів цієї кнопки і розглянемо перевизначення мконок та тексту для кожного екземпляра.


Частина 2.1 - Створення компонента меню з використанням екземплярів кнопок

Отже, давайте відкриємо файл Sketch і почнемо зі створення меню фону, потрібно зробити його досить великим, щоб помістилися всі чотири кнопки. І поки що залишимо його досить простим - прямокутним.

Знову потрібно створити прямокутник, перетворити його на символ, потім видалити цей екземпляр і попрацювати над головним символом на вашій сторінці символів.

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

Також дамо тлі ідентифікатор qml, у цьому випадку myMenu_Symbol_background .

Як тільки у вас буде меню фону, можна починати використовувати символи для створення екземплярів кнопок із компонента головної кнопки, яку створили у sketch та додали функціональність взаємодії у Design Studio.
Для цього перейдіть в Sketch Menu для додавання ассетів, кнопку з плюсом вгорі та перейти до символів/документу (symbols/document) - тут відображаються поточні символи, доступні в документі. На даний момент тут є лише один символ – ваша кнопка, так що давайте продовжимо і додамо це до нового компонента меню.

Тепер у вас є перший екземпляр і можна просто повторити цей процес, скопіювати, вставити або використовувати alt+drag, щоб додати ще три кнопки в меню.

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

Отже, давайте почнемо з меню, оскільки це також символ використовуємо схему іменування аналогічну останньої і назвемо її - * myMenu_Symbol *.

Тепер можна подивитися на кнопки, тому в цьому випадку будемо використовувати наступну схему іменування для цих випадків. Це буде виглядати приблизно так:

myButton_myMenu_1
myButton_myMenu_2
myButton_myMenu_3
myButton_MyMenu_4

Але що було б краще, так це конкретне ім'я для кожної ролі кнопок, тому давайте подумаємо про те, що ви хочете, щоб ці кнопки робили. Грунтуючись на тому, яким може бути цей інтерфейс користувача можна придумати ще більш чітку схему іменування цих кнопок.

Одна річ, яку не слід робити - це змінювати ці ідентифікатори в середині проекту, хоча теоретично це можливо, завдяки механізму злиття, що відстежує ці зміни ідентифікаторів, тому рекомендується дотримуватися схеми імен протягом усього процесу.

Отже, натомість давайте використовувати ці ідентифікатори:

myButton_myMenu_home
myButton_myMenu_dashboard
myButton_myMenu_profile
myButton_myMenu_settings

Так зрозуміліше для чого призначений кожен екземпляр, а також це гарантує, що у вас є унікальні ідентифікатори кожного екземпляра вашого символу.

До цього моменту можна було б реекспортувати його в qds, але поки ви тут, давайте підготуємо пару додаткових речей для кнопок, додавши мітку та іконку.

Частина 2.2 - Підготовка символу для перевизначення властивостей

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

Тепер знову перейдіть в Sketch Menu з + символом, виберіть текстовий елемент і додайте його до вашого дизайну, переконавшись, що це другий шар, прямо під областю миші.

Тепер переконаємося, що текстове поле має фіксований розмір, який охоплює всю ширину кнопки, а також, що текстовий об'єкт вирівняний по центру, таким чином, коли ви перевизначаєте цей текст у ваші екземпляри, нова мітка буде центрована і, коли експортуєте в qds ці властивості також будуть перенесені.

Оскільки потрібно перевизначити цей текст, давайте просто використовуємо “default text” («за замовчуванням текст») тут як placeholder.

І знову переконаємося, що текстовий об'єкт має хороший ідентифікатор qml, давайте назвемо його myButton_Symbol_label , а потім можна перетягнути його так, щоб він знаходився під областю миші, а також необхідно переконатися, що шар має те ж ім'я, що і ідентифікатор qml .

Тепер, щоб додати іконку або фактично три версії однієї іконки на цьому етапі потрібно використовувати іконку placeholder для основного символу, а потім повернуться та змінити окремі іконки, тому можна просто перетягнути іншу фігуру, щось просте, наприклад, трикутник, перейшовши в меню фігур (shapes menu) у sketch, вибравши трикутник і перетягнувши його.

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

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

Тепер, як і у всіх шарах, варто змінити ідентифікатори та перевірити параметри експорту, переконавшись, що у цьому випадку всі значки налаштовані на експорт як дочірні. Дамо назви ідентифікаторам:

myButton_icon_placeholder_default
myButton_icon_placeholder_hover
myButton_icon_placeholder_pressed

Також варто переконатися, що шари мають те саме ім'я, що і ідентифікатори і налаштовані на експорт як дочірні елементи, а потім перетягнемо їх під область миші в навігаторі шарів (layer navigator).

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

Як коротке пояснення для перевизначення властивостей за допомогою символів в sketch, ви можете змінити деякі частини екземпляра символу на щось нове. Це не вплине на вихідний головний символ, а тільки внесе ці зміни до локального примірника, до якого ви зміни та вносите.

Хоча в sketch є багато різних типів перевизначення символів за допомогою qds, розробники підтримують лише кілька з них, основним з яких є текст. Іншим перевизначником є сам символ, але оскільки це досить просунута концепція, її стосуватися поки що не варто, а натомість зосередимося лише на текстовому варіанті.

Для цього потрібно перейти до першого екземпляра вашої кнопки, який назвали home, і на панелі властивостей sketch для вашої кнопки видно, що є нове поле для перевизначення тексту. Щоб використовувати його, можна просто надрукувати тут новий текст, тому для цього першого екземпляра можна просто додати "Home" до тексту перевизначення, і побачимо, що в цьому першому випадку тільки у вас є новий текст.

Коли повторно імпортуємо це пізніше у design studio отримаємо властивість псевдоніма (alias property) для компонента кнопки для цього текстового поля та автоматично додаємо текст "Home" до псевдоніму цього екземпляра. А поки давайте закінчимо додавання нової текстової мітки до всіх кнопок, а потім можна експортувати ваш дизайн і продовжити роботу з qds.

Отже, давайте додамо текст до другого примірника, в цьому випадку * "Dashboard" ("Панель інструментів"), третє - "Profile" ("Профіль"), четверте - "Settings" ("Налаштування") *.

Тепер можна зрозуміти, чому текстове поле фіксованої ширини кнопки і використовували опцію вирівнювання по центру, оскільки ваш текст тепер завжди добре центрований у вашому дизайні кнопки, незалежно від його довжини.

Отже, давайте експортуємо це знову, цього разу отримаємо попередження про перевизначення метаданих, що є нормальним, так що продовжимо і коли це закінчиться повернемося до qds.

Частина 2.3 - Злиття імпорту

У qds варто переконатися, що ви знаходитесь у правильному проекті, а потім повторити кроки для імпорту файлу метаданих, натиснувши кнопку імпорту ассетів у бібліотеці qml і викликавши імпортер ассетів (asset importer). Дуже важливо переконатися, що ви вибрали опцію злиття для імпорту, якщо ви забудете це зробити, то вся робота, яку ви проробили на попередньому уроці, перезапишеться. Тому, будь ласка, переконайтеся, що у вас вибрано опцію злиття (merge option), перш ніж продовжити. Цей параметр є постійним між сесіями, тому вам доведеться робити це лише один раз, але перевіряти його потрібно щоразу, коли імпортуєте з метою безпеки.

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

Перше, що можна перевірити, - це новий компонент меню, тому давайте подивимося в папці проекту myMenu_Symbol.ui.qml і відкриємо його в редакторі форм.

Ви повинні побачити меню з чотирма кнопками та текстом псевдоніма для кожної, оскільки стану та взаємодії для цих кнопок вже створені це меню має бути повністю функціональним, за винятком зміни іконок, які зробимо трохи пізніше.

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

Тепер, коли потрібно внести зміни в загальну поведінку цих кнопок, вам потрібно лише перейти до основного компоненту, внести свої зміни там, і вони будуть автоматично застосовані до всіх екземплярів. Що й зробимо зараз, зробивши іконки у правильному стані.

Отже, тепер переключимося на компонент кнопки і попрацюємо з іконками.

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

Зробивши це можна перевірити вашу кнопку безпосередньо за допомогою кнопки попереднього перегляду і тепер ви повинні подивитися, що вона спрацьовує відразу. Також можна це швидко перевірити у вашому компоненті меню, щоб переконатися, що вона працює з усіма екземплярами.

На наступному кроці потрібно повернутись у sketch і створити окремі іконки. До цього потрібно підготувати кнопку для заміни іконок у кожному екземплярі, і ви зможете зробити це, зробивши ваші власні псевдоніми тут у qds. Так що давайте зробимо, переконавшись, що ваш компонент знаходиться в базовому стані, а потім вибравши ассет для першої з іконок за промовчанням.

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

Давайте повторимо цей крок для кожного з іконок, наведіть курсор миші та натисніть. Встановивши псевдонім вихідної іконки, можна подивитися на компонент меню.

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

Повернемося до них знов після того, як створимо деякі іконки у sketch та змінимо їх пізніше.

Частина 2.4. Розробка іконок

З відкритим sketch створюватимемо артборд тільки для іконок. Артборди зазвичай завжди є компонентами в qds після імпорту, використовуватимемо їх пізніше, коли підійдемо до розробки екранів, але для цього випадку імпортуємо ассети з цього артборду і не генеруватимемо qml, але про це пізніше.

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

Намалюємо їх безпосередньо в sketch і використовуємо кілька комбінованих фігур, щоб подивитися на хороший спосіб використання функції злиття Bridge плагіна.

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

Таким чином, комбінована фігура виглядає як окремий міні-компонент: комбінована фігура виступає як батько для двох дочірніх шарів, які намальовані під нею, і, оскільки, потрібен лише один асет іконки, можна переконатися, що комбінована фігура сама по собі є дочірньою і два дочірні шари налаштовані на злиття. Для цього потрібно об'єднати ці два шари в одне зображення під час експорту, яке стане об'єднаною формою, тому матиме ідентифікатор цього елемента.

Це особливо корисний метод, коли розглядається нерозривний робочий процес як мінімізація ассетів у проекті, але при цьому завжди дозволяє повернутися і змінити окремі частини проекту в sketch.

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

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

Відео трохи прискорене, щоб заощадити час, але в міру розробки потрібно перевіряти, щоб щоразу перейменовувати свої ідентифікатори та шари qml, а також перевіряти, що тільки верхня комбінована фігура налаштована на експорт дочірнього елемента та всі вкладені форми налаштовані на злиття.

Отже, тепер є 4 іконки по три варіанти на іконку, давайте розглянемо всі ці qml ідентифікатори і переконаємося, що вони унікальні і значущі для вашого проекту.

Спочатку давайте подивимося сам артборд. Можна викликати щось просте, наприклад, iconAssets, навіть якщо ви не збираєтеся генерувати qml з цього артборду, гарною практикою є впевненість у тому, що ви завжди перевіряєте ваші ідентифікатори. Сподіваємося, колись це стане вашою другою натурою.

myButton_icon_home_default
myButton_icon_home_hover
myButton_icon_home_pressed

myButton_icon_dashboard_default
myButton_icon_dashboard_hover
myButton_icon_dashboard_pressed

myButton_icon_profile_default
myButton_icon_profile_hover
myButton_icon_profile_pressed

myButton_icon_settings_default
myButton_icon_settings_hover
myButton_icon_settings_pressed

Також варто переконатися, що всі ідентифікатори дочірніх верств також унікальні, навіть якщо вони не будуть частиною проекту і, отже, не такі важливі, потрібно намагатися, щоб у процесі імпорту не було помилок. Тому замість того, щоб працювати за схемою іменування просто перерахуємо їх тут простим способом.

Наприклад, значок будинку використовує цей шаблон для об'єднаних форм.

homeSquare1
homeTriangle1

homeSquare2
homeTriangle2

homeSquare3
homeTriangle3

Тепер, коли всі ваші іконки налаштовані та перевірені ідентифікатори qml, можна реекспортувати проект і повернутися до qds, щоб додати ці іконки до ваших кнопок. Отже, натиснемо кнопку експорту і знову перезапишемо метадані.

Тепер можна повернутися до qds та імпортера ассетів. Цього разу скористаємось іншою функцією імпортера та імпортуємо лише нові ассети іконок, знявши прапорець «згенерувати qml», і переконаємося, що злиття, як і раніше, перевіряється на майбутнє у будь-якому випадку. Продовжуйте та імпортуйте ваш проект знову.

Частина 2.5. Заміна джерела іконки

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

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

Нижче наведено код qml для обох компонентів:

MyButton_Symbol.ui.qml

import QtQuick 2.8

Item {
    id: myButton_Symbol
    width: 211
    height: 211
    property alias myButton_icon_placeholder_defaultSource: myButton_icon_placeholder_default.source
    property alias myButton_icon_placeholder_pressedSource: myButton_icon_placeholder_pressed.source
    property alias myButton_icon_placeholder_hoverSource: myButton_icon_placeholder_hover.source
    state: "default"
    property alias myButton_Symbol_labelText: myButton_Symbol_label.text

    Image {
        id: myButton_SymbolAsset
        x: 0
        y: 0
        source: "assets/myButton_Symbol.png"
    }

    Image {
        id: myButton_Symbol_default
        x: 0
        y: 0
        source: "assets/myButton_Symbol_default.png"
    }

    Image {
        id: myButton_Symbol_hover
        x: 0
        y: 0
        source: "assets/myButton_Symbol_hover.png"
    }

    Image {
        id: myButton_Symbol_pressed
        x: 0
        y: 0
        source: "assets/myButton_Symbol_pressed.png"
    }

    Text {
        id: myButton_Symbol_label
        x: 6
        y: 150
        width: 200
        height: 23
        color: "#ff818181"
        text: "default text"
        font.styleName: "Light"
        horizontalAlignment: Text.AlignHCenter
        font.family: "Helvetica Neue"
        font.pixelSize: 20
        verticalAlignment: Text.AlignVCenter
    }

    Image {
        id: myButton_icon_placeholder_pressed
        x: 70
        y: 55
        source: "assets/myButton_icon_placeholder_pressed.png"
    }

    Image {
        id: myButton_icon_placeholder_hover
        x: 70
        y: 55
        source: "assets/myButton_icon_placeholder_hover.png"
    }

    Image {
        id: myButton_icon_placeholder_default
        x: 70
        y: 55
        source: "assets/myButton_icon_placeholder_default.png"
    }

    MouseArea {
        id: myButton_Symbol_MouseArea
        x: 0
        y: 0
        width: 211
        height: 211
        hoverEnabled: true
    }
    states: [
        State {
            name: "default"
            when: !myButton_Symbol_MouseArea.containsMouse
                  && !myButton_Symbol_MouseArea.pressed
            PropertyChanges {
                target: myButton_Symbol_hover
                visible: false
            }

            PropertyChanges {
                target: myButton_Symbol_pressed
                visible: false
            }

            PropertyChanges {
                target: myButton_icon_placeholder_pressed
                visible: false
            }

            PropertyChanges {
                target: myButton_icon_placeholder_hover
                visible: false
            }
        },
        State {
            name: "hover"
            when: myButton_Symbol_MouseArea.containsMouse
                  && !myButton_Symbol_MouseArea.pressed
            PropertyChanges {
                target: myButton_Symbol_pressed
                visible: false
            }

            PropertyChanges {
                target: myButton_Symbol_default
                visible: false
            }

            PropertyChanges {
                target: myButton_icon_placeholder_pressed
                visible: false
            }

            PropertyChanges {
                target: myButton_icon_placeholder_default
                visible: false
            }
        },
        State {
            name: "pressed"
            when: myButton_Symbol_MouseArea.pressed
            PropertyChanges {
                target: myButton_Symbol_default
                visible: false
            }

            PropertyChanges {
                target: myButton_Symbol_hover
                visible: false
            }

            PropertyChanges {
                target: myButton_icon_placeholder_default
                visible: false
            }

            PropertyChanges {
                target: myButton_icon_placeholder_hover
                visible: false
            }
        }
    ]
}


myMenu_Symbol.ui.qml



import QtQuick 2.8

Item {
    id: myMenu_Symbol
    width: 250
    height: 850

    Image {
        id: myMenu_SymbolAsset
        x: 0
        y: 0
        source: "assets/myMenu_Symbol.png"
    }

    MyButton_Symbol {
        id: myButton_myMenu_settings
        x: 20
        y: 639
        width: 211
        height: 211
        myButton_icon_placeholder_defaultSource: "assets/myButton_icon_settings_default.png"
        myButton_icon_placeholder_hoverSource: "assets/myButton_icon_settings_hover.png"
        myButton_icon_placeholder_pressedSource: "assets/myButton_icon_settings_pressed.png"
        myButton_Symbol_labelText: "Settings"
    }

    MyButton_Symbol {
        id: myButton_myMenu_profile
        x: 20
        y: 428
        width: 211
        height: 211
        myButton_icon_placeholder_defaultSource: "assets/myButton_icon_profile_default.png"
        myButton_icon_placeholder_hoverSource: "assets/myButton_icon_profile_hover.png"
        myButton_icon_placeholder_pressedSource: "assets/myButton_icon_profile_pressed.png"
        myButton_Symbol_labelText: "Profile"
    }

    MyButton_Symbol {
        id: myButton_myMenu_dashboard
        x: 20
        y: 217
        width: 211
        height: 211
        myButton_icon_placeholder_defaultSource: "assets/myButton_icon_dashboard_default.png"
        myButton_icon_placeholder_hoverSource: "assets/myButton_icon_dashboard_hover.png"
        myButton_icon_placeholder_pressedSource: "assets/myButton_icon_dashboard_pressed.png"
        myButton_Symbol_labelText: "Dashboard"
    }

    MyButton_Symbol {
        id: myButton_MyMenu_home
        x: 20
        y: 6
        width: 211
        height: 211
        myButton_icon_placeholder_defaultSource: "assets/myButton_icon_home_default.png"
        myButton_icon_placeholder_hoverSource: "assets/myButton_icon_home_hover.png"
        myButton_icon_placeholder_pressedSource: "assets/myButton_icon_home_pressed.png"
        myButton_Symbol_labelText: "Home"
    }
}
Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.

Вам це подобається? Поділіться в соціальних мережах!

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up
AD

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:50бали,
  • Рейтинг балів-4
m
  • molni99
  • 26 жовтня 2024 р. 01:37

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:80бали,
  • Рейтинг балів4
m
  • molni99
  • 26 жовтня 2024 р. 01:29

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:20бали,
  • Рейтинг балів-10
Останні коментарі
ИМ
Игорь Максимов22 листопада 2024 р. 11:51
Django - Підручник 017. Налаштуйте сторінку входу до Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Evgenii Legotckoi
Evgenii Legotckoi31 жовтня 2024 р. 14:37
Django - Урок 064. Як написати розширення для Python Markdown Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
A
ALO1ZE19 жовтня 2024 р. 08:19
Читалка файлів fb3 на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь Максимов05 жовтня 2024 р. 07:51
Django - Урок 064. Як написати розширення для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas505 липня 2024 р. 11:02
QML - Урок 016. База даних SQLite та робота з нею в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Тепер обговоріть на форумі
Evgenii Legotckoi
Evgenii Legotckoi24 червня 2024 р. 15:11
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
t
tonypeachey115 листопада 2024 р. 06:04
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
NSProject
NSProject04 червня 2022 р. 03:49
Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…
9
9Anonim25 жовтня 2024 р. 09:10
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

Слідкуйте за нами в соціальних мережах