Ruslan Polupan
Ruslan PolupanJuly 19, 2019, 6:24 a.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:

#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  

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

We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.

Do you like it? Share on social networks!

IscanderChe
  • July 19, 2019, 6:37 a.m.

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

Evgenii Legotckoi
  • July 19, 2019, 6:47 a.m.
  • (edited)

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

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

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

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

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

Evgenii Legotckoi
  • July 19, 2019, 6:48 a.m.

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

IscanderChe
  • July 19, 2019, 7:31 a.m.

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

Comments

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

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:50points,
  • Rating points-4
m

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:80points,
  • Rating points4
m

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:20points,
  • Rating points-10
Last comments
ИМ
Игорь МаксимовNov. 22, 2024, 10:51 p.m.
Django - Tutorial 017. Customize the login page to Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Evgenii Legotckoi
Evgenii LegotckoiNov. 1, 2024, 12:37 a.m.
Django - Lesson 064. How to write a Python Markdown extension Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
A
ALO1ZEOct. 19, 2024, 6:19 p.m.
Fb3 file reader on Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь МаксимовOct. 5, 2024, 5:51 p.m.
Django - Lesson 064. How to write a Python Markdown extension Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas5July 5, 2024, 9:02 p.m.
QML - Lesson 016. SQLite database and the working with it in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Now discuss on the forum
m
moogoNov. 22, 2024, 6:17 p.m.
Mosquito Spray System Effective Mosquito Systems for Backyard | Eco-Friendly Misting Control Device & Repellent Spray - Moogo ; Upgrade your backyard with our mosquito-repellent device! Our misters conce…
Evgenii Legotckoi
Evgenii LegotckoiJune 25, 2024, 1:11 a.m.
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
t
tonypeachey1Nov. 15, 2024, 5:04 p.m.
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
NSProject
NSProjectJune 4, 2022, 1:49 p.m.
Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…

Follow us in social networks