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