Ruslan Polupan
Ruslan Polupan19 липня 2019 р. 06:24

Проект iMpos. Частина 004. Мовні установки програми, QTranslator. Створення діалогу входу до системи

Мовні установки програми, QTranslator.

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

#ifndef QT_NO_TRANSLATION
    //Определяем имя языкового файла в зависимости от текущей локали
    QString translatorFileName = QLatin1String("qt_");
    translatorFileName += QLocale::system().name();
    //Создаем и пытаемся загрузить 
    QTranslator *translator = new QTranslator(&a);
    if (translator->load(translatorFileName, QLibraryInfo::location(QLibraryInfo::TranslationsPath)))
        a.installTranslator(translator);
    else
        qWarning(logWarning()) << "Не удалось загрузить языковый файл.";
#endif  

Реєстрація користувача програми

Діалог реєстрації користувача програми будемо викликати в залежності від налаштування 1000 перед запуском основного вікна програми.


Вікно матиме такий вигляд:

Додаємо нові файли до нашого проекту. Права кнопка миші на назві проекту. Вибираємо Додати новий...

Вибираємо шаблон Клас форми Qt Designer

Виберіть шаблон форми Діалог без кнопок

Вказуємо ім'я класу та шлях до його файлів.

Підсумковий крок.

Створився заголовний файл класу logindialog.h файл вихідного коду logindialog.cpp і файл форми logindialog.ui який відкрився в редакторі форм.

У багатьох статтях на різних сайтах я зустрічав фразу "створювати інтерфейс в Designer нехай будуть дизайнери, а ми робитимемо це в коді", та й у прикладах інтерфейс, що йдуть з Qt, створюється в коді програми.
Я при першому знайомстві з ним витратив кілька днів на вивчення його можливостей і зупинився на тому, що по максимуму використовуватиму його. Навіщо робити руками те, що середовище робить автоматично.
Додаємо необхідні елементи управління на форму та даємо осмислені імена об'єктам.

Об'єкт labelLogo міститиме малюнок, щоб він відображався необхідно створити файл ресурсів і додати туди зображення.
Переходимо у вкладку Редактор і додаємо новий файл. Вибираємо Файл ресурсів Qt .

Вказуємо ім'я та шлях до файлу.

Підсумок:

У каталозі з проектом створюємо папку Image та розміщуємо туди файл users.png . У каталозі проекту правою кнопкою на файлі resource.qrc , вибираємо Додати існуючі файли , вибираємо файл із зображенням. Отримуємо таке:

Відкриваємо форму logindialog.ui вибираємо об'єкт labelLogo шукаємо властивість pixmap.

Натискаємо кнопку … та вибираємо зображення.

Натискаємо Ctrl+J (Наздогнати розмір)

Вибираємо об'єкт labelTitle вибираємо властивість styleSheet, Додаємо шрифт, встановлюємо Bold та розмір 14

Додаємо колір, вибираємо color, вибираю синій колір. Отримуємо наступну таблицю стилів:

Тепер включаємо властивість WordWarp і змінюємо allignment

Знову Ctrl+J та змінюємо розмір об'єкта.

Вибираємо об'єкт comboBoxUser і включаємо властивість editable для того, щоб здійснювався пошук імені користувача при введенні з клавіатури.

Далі вибираємо все крім зображення та заголовка, Ctrl + L (права кнопка миші компонування, скомпонувати по вертикалі)
У властивості вийшов Layot змінюємо layoutStretch ось так :

Таким чином, ми встановлюємо об'єкту labelInfo максимальний розмір.

Виділяємо всю форму, права кнопка миші, Компонування, Компонувати по сітці (або кнопка на панелі інструментів).
Вибираємо labelLogo змінюємо вертикальне вирівнювання AlignTop.

Натискаємо Alt+Shift+R та тестуємо поведінку діалогу.

Чистого часу для створення діалогу витрачено не більше 5 хвилин, причому після кожної зміни можна переглядати як буде виглядати форма в процесі роботи. За це я і віддаю перевагу Qt Designer.

Архів проекту
iMposCh004.zip iMposCh004.zip

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.

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

IscanderChe
  • 19 липня 2019 р. 06:37

Был бы там ещё QSplitter - цены бы не было Qt Designer. :) Мне он как раз на моём проекте понадобился. Так что теперь челлендж по формам через код.

Evgenii Legotckoi
  • 19 липня 2019 р. 06:47
  • (відредаговано)

Согласен насчет того, что Qt Designer очень удобная вещь.

Многие програмисты говорят о том, что якобы мы не дизайнеры и пользоваться Qt дизайнером не будем. Вот только это абсолютно однобокое мнение тех, которые пишут кучу "бесполезного" кода для вёрстки, а полезный код, который выполняет конкретную работу, порой просто теряется в куче созданий и инициализаций Объектов Вёрстки. Я не хочу смотреть на вёрстку в коде диалогового окна, я хочу видеть то, что это окно делает, не кучу new QLabel() , которые создаются и не меняются в течение всего жизненного цикла диалога.

Например в нашем проекте генерированный через Qt Designer код главного окна приложения занимает 16000 строк кода, это без полезной работы этого окна. И смотреть на это не нужно и не хочется, ибо это лишнее, смотреть тот код, который и так сгенерирован рабочим и там не будет пропущен какой-нибудь parent, что нельзя сказать с уверенностью, если это будет писать программист.

Также они абсолютно кладут болт на работу переводчиков. Поскольку Qt Linguist позволяет при переводе просматривать готовый диалог ui формы, и переводчику будет удобнее сделать качественный перевод видя контекст окна приложения, чем непонятные строчки кода, где это всё написано.

Так что выводы можно сделать довольно однозначные.

Evgenii Legotckoi
  • 19 липня 2019 р. 06:48

На самом деле QSplitter есть, только немного по хитрому он там ставится. Вот статья по QSplitter

IscanderChe
  • 19 липня 2019 р. 07:31

Ага, попробовал. Удобно. Спасибо!

Коментарі

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,>…

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