Ruslan Polupan
July 19, 2019, 4:24 p.m.

IMpos project. Part 004. Application language settings, QTranslator. Creating a login dialog to the system

Application language settings, QTranslator.

To correctly display controls in the locale language, as well as to support the multilingual interface, the application needs to specify which language file will be used.
To do this, add the following code to main.cpp:

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

Application user registration

Depending on the setting 1000, we will call the application user registration dialog before launching the main program window.


The window will look like this:

Adding new files to our project. Right mouse button on the project name. Choose Add New...

Select the template Qt Designer Form Class

Choose a template form Dialog without Buttons

Specify the name of the class and the path to its files.

Final step.

The header file of the class logindialog.h was created, the source file logindialog.cpp and the form file logindialog.ui which opened in the form editor.

In many articles on various sites, I came across the phrase “create an interface in Designer, let there be designers, and we will do it in code”, and in the examples that come with Qt, the interface is created in the program code.
When I first met him, I spent several days studying its capabilities and settled on the fact that I would use it to the maximum. Why do by hand what the environment does automatically.
We add the necessary controls to the form and give meaningful names to the objects.

The labelLogo object will contain a picture, in order for it to be displayed, you need to create a resource file and add an image there.
Go to the Editor tab and add a new file. Select Qt Resource File .

Specify the name and path to the file.

Outcome:

In the directory with the project, create a folder Image and place the file users.png there. In the project directory, right-click on the resource.qrc file, select Add Existing Files , select the image file. We get the following:

Open the logindialog.ui form, select the labelLogo object, look for the pixmap property.

Press the button ... and select an image.

Press Ctrl+J (Fit Size)

Select the labelTitle object, select the styleSheet property, Add a font, set Bold and size 14

Add color, select color, select blue color. We get the following style sheet:

Now turn on the wordWarp property and change the alignment

Again Ctrl+J and resize the object.

We select the comboBoxUser object and include the editable property in order to search for the username when typing from the keyboard.

Next, select everything except the image and title, Ctrl + L (right mouse button layout, layout vertically)
In the properties of the resulting Layot, change the layoutStretch like this:

Thus, we set the labelInfo object to the maximum size.

Select the entire shape, right mouse button, Layout, Layout to Grid (or the button on the toolbar).
Select labelLogo and change vertical alignment to AlignTop.

Press Alt+Shift+R and test the behavior of the dialog.

No more than 5 minutes were spent to create the dialog, and after each change, you can see how the form will look in the process of work. This is why I prefer Qt Designer.

Project archive
iMposCh004.zip iMposCh004.zip

By article asked0question(s)

3

Do you like it? Share on social networks!

IscanderChe
  • July 19, 2019, 4:37 p.m.

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

Evgenii Legotckoi
  • July 19, 2019, 4:47 p.m.
  • (edited)

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

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

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

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

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

Evgenii Legotckoi
  • July 19, 2019, 4:48 p.m.

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

IscanderChe
  • July 19, 2019, 5:31 p.m.

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

Comments

Only authorized users can post comments.
Please, Log in or Sign up
  • Last comments
  • IscanderChe
    April 12, 2025, 5:12 p.m.
    Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
  • AK
    April 1, 2025, 11:41 a.m.
    Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
  • Evgenii Legotckoi
    March 9, 2025, 9:02 p.m.
    К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
  • VP
    March 9, 2025, 4:14 p.m.
    Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
  • ИМ
    Nov. 22, 2024, 9:51 p.m.
    Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…