Мовні установки програми, 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
Был бы там ещё QSplitter - цены бы не было Qt Designer. :) Мне он как раз на моём проекте понадобился. Так что теперь челлендж по формам через код.
Согласен насчет того, что Qt Designer очень удобная вещь.
Многие програмисты говорят о том, что якобы мы не дизайнеры и пользоваться Qt дизайнером не будем. Вот только это абсолютно однобокое мнение тех, которые пишут кучу "бесполезного" кода для вёрстки, а полезный код, который выполняет конкретную работу, порой просто теряется в куче созданий и инициализаций Объектов Вёрстки. Я не хочу смотреть на вёрстку в коде диалогового окна, я хочу видеть то, что это окно делает, не кучу new QLabel() , которые создаются и не меняются в течение всего жизненного цикла диалога.
Например в нашем проекте генерированный через Qt Designer код главного окна приложения занимает 16000 строк кода, это без полезной работы этого окна. И смотреть на это не нужно и не хочется, ибо это лишнее, смотреть тот код, который и так сгенерирован рабочим и там не будет пропущен какой-нибудь parent, что нельзя сказать с уверенностью, если это будет писать программист.
Также они абсолютно кладут болт на работу переводчиков. Поскольку Qt Linguist позволяет при переводе просматривать готовый диалог ui формы, и переводчику будет удобнее сделать качественный перевод видя контекст окна приложения, чем непонятные строчки кода, где это всё написано.
Так что выводы можно сделать довольно однозначные.
На самом деле QSplitter есть, только немного по хитрому он там ставится. Вот статья по QSplitter
Ага, попробовал. Удобно. Спасибо!