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
г
  • ги
  • April 23, 2024, 3:51 p.m.

C++ - Test 005. Structures and Classes

  • Result:41points,
  • Rating points-8
l
  • laei
  • April 23, 2024, 9:19 a.m.

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

  • Result:10points,
  • Rating points-10
l
  • laei
  • April 23, 2024, 9:17 a.m.

C++ - Тест 003. Условия и циклы

  • Result:50points,
  • Rating points-4
Last comments
k
kmssrFeb. 8, 2024, 6:43 p.m.
Qt Linux - Lesson 001. Autorun Qt application under Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
Qt WinAPI - Lesson 007. Working with ICMP Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
EVA
EVADec. 25, 2023, 10:30 a.m.
Boost - static linking in CMake project under Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
J
JonnyJoDec. 25, 2023, 8:38 a.m.
Boost - static linking in CMake project under Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
G
GvozdikDec. 18, 2023, 9:01 p.m.
Qt/C++ - Lesson 056. Connecting the Boost library in Qt for MinGW and MSVC compilers Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
Now discuss on the forum
G
GarApril 22, 2024, 5:46 a.m.
Clipboard Как скопировать окно целиком в clipb?
DA
Dr Gangil AcademicsApril 20, 2024, 7:45 a.m.
Unlock Your Aesthetic Potential: Explore MSC in Facial Aesthetics and Cosmetology in India Embark on a transformative journey with an msc in facial aesthetics and cosmetology in india . Delve into the intricate world of beauty and rejuvenation, guided by expert faculty and …
a
a_vlasovApril 14, 2024, 6:41 a.m.
Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Евгений, добрый день! Такой вопрос. Верно ли следующее утверждение: Любое Android-приложение, написанное на Java/Kotlin чисто теоретически (пусть и с большими трудностями) можно написать и на C+…
Павел Дорофеев
Павел ДорофеевApril 14, 2024, 2:35 a.m.
QTableWidget с 2 заголовками Вот тут есть кастомный QTableView с многорядностью проект поддерживается, обращайтесь
f
fastrexApril 4, 2024, 4:47 a.m.
Вернуть старое поведение QComboBox, не менять индекс при resetModel Добрый день! У нас много проектов в которых используется QComboBox, в версии 5.5.1, когда модель испускает сигнал resetModel, currentIndex не менялся. В версии 5.15 при resetModel происходит try…

Follow us in social networks