Evgenii Legotckoi
Evgenii Legotckoi30. Mai 2016 08:13

Qt/C++ - Lektion 049. QTranslator - dynamische Übersetzung einer mehrsprachigen Anwendung in Qt

Früher oder später stößt ein Qt-Anwendungsentwickler auf die Notwendigkeit, Mehrsprachigkeit in seiner Anwendung zu unterstützen. Dann kommen die Klasse QTranslator und die spezialisierte Anwendung zum Erstellen von Übersetzungen Qt Linguist zur Hilfe.

Das Klassenobjekt QTranslator wird verwendet, um Übersetzungen aus einer speziellen Datei mit der Erweiterung .qm, zu laden, die eine hexadezimale Übersetzungsdatei ist. Diese Datei wird aus einer Übersetzungsdatei im XML-Format zusammengestellt, die die Erweiterung ts hat und in die pro-Datei des Projekts geschrieben wird. Diese Datei enthält alle Zeilen der Anwendung, die in die tr()-Funktion eingeschlossen wurden. Ich empfehle, dass Sie die gesamte Anwendungsoberfläche auf Englisch einstellen, was die Standardsprache sein wird, und die Übersetzungen mit der gewünschten Sprache laden aus den Übersetzungsdateien. Wenn die erforderliche Übersetzungsdatei nicht gefunden wird, wird die englische Übersetzung automatisch heruntergeladen. Obwohl Sie natürlich eine andere Sprache als Standardsprache verwenden können.


Beispiel zum Laden einer Übersetzung

Die Struktur des Übersetzungsdateinamens spielt eine wichtige Rolle bei der Arbeit mit QTranslator. Schauen wir uns ein Minimalbeispiel an.

#include "mainwindow.h"
#include <QApplication>
#include <QTranslator>
#include <QLibraryInfo>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QTranslator qtLanguageTranslator;
    qtLanguageTranslator.load(QString("QtLanguage_") + QString("ru_RU"));
    qApp->installTranslator(&qtLanguageTranslator);

    MainWindow w;
    w.show();

    return a.exec();
}

In diesem Beispiel wird ein Objekt der Klasse QTranslator erstellt, in das die für uns interessante Datei mit der angegebenen Sprache geladen wird. In diesem Fall ist der vollständige Name der Übersetzungsdatei QtLanguage_ru.qm. Das heißt, der allgemeine Name für die Übersetzungsdatei ist QtLanguage und das Präfix der Übersetzungssprache ist _ru . Aber Sie haben schon bemerkt, dass der String QtLanguage_ru_RU als Argument für die load-Methode gebildet wird. Dies geschieht, um den gewünschten Dialekt der Sprache zu bestimmen, zum Beispiel amerikanisch (en_US) oder britisch ( en_DE) Englisch. Wenn der Name der Übersetzungsdatei jedoch keinen Dialekt angibt, wird die Datei ohne Angabe des Dialekts ausgewählt, dh QtLanguage_ru.qm.

Nachdem die Übersetzungsdatei heruntergeladen wurde, muss sie in der Anwendung installiert werden. In diesem Fall der globale Zeiger auf die Anwendung qApp->installTranslator(&qtLanguageTranslator).

Erstellen Sie eine Übersetzungsdatei

Nachdem wir die minimale Methode zum Installieren einer Übersetzung in einer Anwendung herausgefunden haben, wollen wir herausfinden, wie Sie eine Übersetzung im Allgemeinen erstellen können. Um eine Übersetzung zu erstellen, müssen Sie die Funktionen tr(), trUtf8(), translate() in der Anwendung usw. verwenden. Das heißt, sämtlicher zu übersetzender Text muss in diesen Funktionen eingerahmt werden, um später eine Übersetzungsdatei zu erstellen. Es könnte so aussehen:

label->setText(QApplication::translate("MainWindow", "Select Language", 0));
label_2->setText(tr("Hello"));
label_3->setText(trUtf8("Hello world"));

Nachdem alle für die Übersetzung erforderlichen Zeilen in der Anwendung markiert sind, muss eine Übersetzungsdatei erstellt, die Übersetzung selbst durchgeführt und die endgültige Datei zusammengestellt werden. Dazu werden folgende Programme verwendet:

  1. lupdate – ein Programm zum Generieren einer Übersetzungsdatei aus dem Feld ÜBERSETZUNGEN in einem Profil sowie zum Aktualisieren von Informationen über alle neuen Zeilen in der Anwendung, die übersetzt werden müssen.
  2. lrelease – ein Programm zum Erstellen der endgültigen Übersetzungsdatei, die in der Anwendung verwendet wird.
  3. Qt Linguist - das eigentliche Paket zum Erstellen von Übersetzungen.

Der erste Schritt, der unternommen werden muss, nachdem die zu übersetzenden Zeilen bereits in die Anwendung geschrieben wurden, besteht darin, dem Profil des Projekts eine zu übersetzende Datei hinzuzufügen. Möglicherweise möchten Sie auch Informationen über die für die Übersetzung verwendete Codierung bereitstellen.

TRANSLATIONS += QtLanguage_ru.ts

CODECFORSRC     = UTF-8

Als nächstes müssen Sie das Dienstprogramm lupdate verwenden, um die Datei QtLanguage_ru.ts. zu erstellen. Sehen Sie in Qt Creator hier nach: Tools -> External -> Linguist -> lupdate .

lupdate meldet das Ergebnis der Suche nach zu übersetzenden Zeichenketten.

Запускается внешняя утилита «D:\Qt\5.6\mingw49_32\bin\lupdate.exe» D:/AndroidQT/QTProjects/QtLanguage/QtLanguage.pro
Updating 'QtLanguage_ru.ts'...
    Found 4 source text(s) (0 new and 4 already existing)

«D:\Qt\5.6\mingw49_32\bin\lupdate.exe» завершилась

Als nächstes öffnen wir Qt Linguist und übersetzen alle Zeichenfolgen, wobei wir markieren, welche übersetzt sind (Dies sind reine Serviceinformationen für den Übersetzer selbst, um sich nicht daran zu erinnern, was übersetzt wurde und was nicht.)

Nachdem Sie die Übersetzung erstellt haben, speichern Sie die Datei und kompilieren Sie die Übersetzungs-Hex-Datei mit dem Hilfsprogramm lrelease. Es kann in Qt Creator an der gleichen Stelle wie lupdate gefunden oder von Qt Linguist ausgeführt werden: Datei -> Release.

Um die Datei zu verwenden, müssen Sie sie im Verzeichnis mit der ausführbaren Datei der Anwendung ablegen und den Pfad zu dieser Datei in den Code schreiben.

Dynamische App-Übersetzung

Das Laden der Übersetzung der App ist in Ordnung, aber was ist, wenn Sie die Übersetzung dynamisch ändern müssen? Schauen wir uns ein kleines Beispiel an, in dem es eine QComboBox mit zwei Sprachen gibt: Englisch und Russisch, wodurch die Übersetzung in der Anwendung geändert wird.

Projektstruktur

  • QtLanguage.pro - Projektprofil;
  • main.cpp - Projektdatei mit Hauptfunktion
  • mainwindow.h - Header-Datei des Hauptanwendungsfensters;
  • mainwindow.cpp - Quellcodedatei für das Hauptanwendungsfenster;
  • mainwindow.ui - Formulardatei des Hauptfensters der Anwendung.

Hauptfenster.ui

Ich ziehe es vor, einen Grafikdesigner zu verwenden, um die GUI der Anwendung zu erstellen, da dies die Entwicklung beschleunigt, es sei denn, etwas Kompliziertes im Erscheinungsbild der Anwendung ist erforderlich. Lassen Sie uns also ein Fenster mit dem folgenden Erscheinungsbild erstellen.

Dieses Fenster enthält:

  • Etikett
  • Etikett_2
  • Kombinationsfeld

Mit deren Übersetzung werden wir arbeiten. Der Komfort des Grafikdesigners liegt auch darin, dass er automatisch die Methode retranslateUi() generiert, die verwendet wird, um die Übersetzung aller in der Anwendung verwendeten Signaturen zu ändern, obwohl Sie eine ähnliche Methode manuell schreiben können selbst, aber ich persönlich möchte keine Zeit verlieren, denn Großartiges kann automatisch erstellt werden. In dieser Lektion sieht es beispielsweise so aus:

void retranslateUi(QMainWindow *MainWindow)
{
    MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow", 0));
    label_2->setText(QApplication::translate("MainWindow", "The QTranslator class provides internationalization support for text output.An object of this class contains a set of translations from a source language to a target language. QTranslator provides functions to look up translations in a translation file. Translation files are created using Qt Linguist.", 0));
    label->setText(QApplication::translate("MainWindow", "Select Language", 0));
} // retranslateUi

QtLanguage.pro

Wie oben erwähnt, geben wir den Namen der Übersetzungsdatei im Projektprofil an.

#-------------------------------------------------
#
# Project created by QtCreator 2016-05-22T14:34:42
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = QtLanguage
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui

TRANSLATIONS = QtLanguage_ru.ts

CODECFORSRC     = UTF-8

main.cpp

Aber in dieser Datei werden wir nichts ändern.

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    MainWindow w;
    w.show();

    return a.exec();
}

Hauptfenster.h

In der Header-Datei des Hauptfensters der Anwendung müssen Sie ein Objekt der Klasse QTranslator deklarieren und die Methode changeEvent(QEvent *event) überschreiben, die das Ereignis zum Ändern der Anwendungssprache definiert.

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTranslator>
#include <QEvent>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

protected:
    // Метод получения событий в главном окне приложения
    // В нём будет производиться проверка события смены перевода приложения
    void changeEvent(QEvent * event) override;

private:
    Ui::MainWindow *ui;
    QTranslator qtLanguageTranslator;   // Выделяем перевод в отдельном поле, иначе ничего работать не будет
};

#endif // MAINWINDOW_H

Hauptfenster.cpp

Die Logik der Anwendung ist wie folgt: Wenn Sie das Element in der Combobox ändern, ändert sich die Übersetzung der Anwendung.

Notiz. Vergessen Sie nicht, die Übersetzungsdatei mit der Erweiterung qm neben die ausführbare Datei der Anwendung zu legen und die erforderlichen DLLs zu sammeln, sonst funktioniert es nicht.

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QApplication>
#include <QTranslator>
#include <QLibraryInfo>
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // Задаём два пункта с текстом локалей в комбобоксе
    ui->comboBox->addItems(QStringList() << "ru_RU" << "en_US");

    // подключаем к сигналу изменения пункта комбобокса лямбда функцию,
    // в которой будет изменяться перевод приложения
    // Здесь имеется интересный момент. Поскольку QComboBox имеет перегрузку сигнатуры сигнала,
    // то нам необходимо скастовать сигнал к нужной сигнатуре.
    // В данном случае будем использовать название пункта при его изменении
    connect(ui->comboBox, static_cast<void (QComboBox::*)(const QString &)>(&QComboBox::currentIndexChanged),
            [=](const QString &str){
        qtLanguageTranslator.load("QtLanguage_" + str, ".");   // Загружаем перевод
        qApp->installTranslator(&qtLanguageTranslator);        // Устанавливаем перевод в приложение
    });

    // Сделаем первоначальную инициализацию перевода для окна прилоежния
    qtLanguageTranslator.load(QString("QtLanguage_") + QString("ru_RU"));
    qApp->installTranslator(&qtLanguageTranslator);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::changeEvent(QEvent *event)
{
    // В случае получения события изменения языка приложения
    if (event->type() == QEvent::LanguageChange) {
        ui->retranslateUi(this);    // переведём окно заново
    }
}

Insgesamt

Als Ergebnis erhalten Sie eine zweisprachige Anwendung in Ihrer grafischen Oberfläche.

Beispielanwendung mit QTranslator herunterladen

Videoanleitung

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

w
  • 16. Mai 2017 00:45

Не работает....

Evgenii Legotckoi
  • 16. Mai 2017 00:51

Очень содержательный комментарий. По моему опыту, не работает всегда потому, что кто-то что-то не правильно делает. А в видео показано, что все отлично работает.

А к чему относится такая проблема? Есть QPlainTextEdit. У него есть горячие клавиши. Но они работает только на английском языке : Когда на клавиатуре нажимается ctrl + 'x', горячая клавиша "вырезать" срабатывает. Но при нажатии ctrl + 'ч' не срабатывает. Стоит создать тему на форуме или это что-то само собой разумеющиеся?
Данный код в main.cpp не помог :

    QString translatorFileName = QLatin1String("qt_");
    translatorFileName += QLocale::system().name();
    QTranslator *translator = new QTranslator(&a);
    if (translator->load(translatorFileName, QLibraryInfo::location(QLibraryInfo::TranslationsPath)))
        a.installTranslator(translator);

А вы случаем не переводили эти сочетания клавиш там, где они устанавливаются? Если где-то есть этот перевод, то есть там подставлена tr() b trUtf8() функция, то могут быть проблемы, лучше те куски кода не оборачивать в функции перевода и не делать перевода, тем более, что это и не нужно. Скорее всего коды клавиш неправильно определяются.

IscanderChe
  • 12. Juli 2018 06:08
Скачал пример, увы, не работает. Комбобокс исправно пашет, переключения языков нет.

Ещё подскажите, как без шаманства кастования переключать язык? Например, как это обычно бывает, после перезагрузки приложения.
Evgenii Legotckoi
  • 12. Juli 2018 06:11

Странно. Должен был бы работать... проверю на досуге.

Вообще сохраняют инфоромацию о языке в QSettings, который нужно установить. Закрывают приложение и после запуска из QSettings подтягивается инофрмация о локализации приложения, после чего загружается требуемый язык.
Evgenii Legotckoi
  • 12. Juli 2018 06:17

Если использовать QComboBox для выбора языка, то с новым синтаксисом сигналов и слотов без каста не получится, но можно использовать шаблонный функционал Qt для упрощения работы с сигналами и слотам. Подробнее в этой статье про QOverload

Arrow
  • 13. Juli 2018 07:55
Хорошая статья. Только один вопрос как это сделать для CMake?

Интересует именно запись в CMakeList

  1. TRANSLATIONS += QtLanguage_ru.ts
  2. CODECFORSRC = UTF-8
Пытался так, но не работает и хотя в документации написано так.

file(GLOB TRANSLATION_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.ts)

qt5_add_translation(TRANSLATION_QM ${TRANSLATION_FILES})
add_custom_target(translations DEPENDS ${TRANSLATION_QM})
Ругается на
qt5_add_translation
пишет - неизвестная команда.

qt5_create_translation понимает, но ничего не происходит.
Evgenii Legotckoi
  • 14. Juli 2018 14:49

У меня на руках есть один проект, где какие-то потуги с переводами и подключением этого добра в CMAKE делались.

Но там файл перевода добавляется прямо в ресурсы проекта. То есть бинарных qm файл переводов добавлялся в qrc файл. То есть при компилировании перевод сохранялся как ресурс, а потом уже из ресурсов забирался.
 
qt5_add_resources(RCC_RESOURCES
        resources/translations.qrc
        )

add_executable({RCC_RESOURCES})
Как понимаю,
qt5_add_translation или qt5_create_translation
Должны ещё создать этот самый бинарный qm файл переводов
Arrow
  • 14. Juli 2018 14:58

Спасибо,  попробую.

Arrow
  • 17. Juli 2018 09:34
Работает так:

find_package (Qt5LinguistTools)
file (GLOB TS_FILES ${SOURCE_DIR}/translations/*.ts)
qt5_add_translation (QM_FILES ${TS_FILES})
add_custom_target (translations ALL DEPENDS ${QM_FILES})
......
add_executable (${PROJECT_NAME} ${SOURCE_FILES} ${HEADER_FILES} ${UI_FILES} ${RESOURCES} ${QM_FILES})
grig_p
  • 13. August 2019 10:17

Здравствуйте!

Все работает, кроме одного.
Есть у меня ряд строковых локализуемых констант. Например:

static const QString V01 = "Вариант 01";
static const QString V02 = "Вариант 02";

Потом, они используются в мэпе:

QMap<int, QString> Variants =
{
    std::pair<int, QString> (1, V01)
  , std::pair<int, QString> (2, V02)
}

В конце есть функция, возвращающая сроку по коду:

QString variant(const int varCode)
{
    return Variants.value(varCode);
}

Как быть в такой ситуации? Константы в tr() не обернешь.

Сделал так:

static const QString V01 = QCoreApplication::tr("Вариант 01");
static const QString V02 = QCoreApplication::tr("Вариант 02");

Лингвист видит эти значения в контексте QCoreApplication,
позволяет их перевести, но доступа к переводу нет,
выводится на русском языке.
Что я делаю не так?

Evgenii Legotckoi
  • 13. August 2019 10:43

Самая главная проблема в том, что у вас это константные переменные, и инициализируется они один единственный раз при запуске программы.
Поэтому делать динамический перевод в таком случае у вас не получится. Вам нужно иначе подходить к этой проблеме.

Напишите код так.

QString variant(const int varCode)
{
    switch (varCode)
    {
        case 1: return QCoreApplication::tr("Вариант 01");
        case 2: return QCoreApplication::tr("Вариант 02");
        default: return QString();
    }
}
grig_p
  • 14. August 2019 01:27
  • (bearbeitet)

Спасибо большое. Получилось

P
  • 19. November 2019 14:10

Здравствуйте.
Спасибо за статью. Сделал перевод программы. Все работает.
Только я делал не динамический, но это пока и не надо.
Но с одной проблемой все же столкнулся.
В программе есть сцена. На ней создаются некие графические элементы.
в конструкторе элементов устанавливаю всплывающую подсказку,
например такую

this->setToolTip(tr("Кнопка"));

Все переводится кроме тултипов.
Не подскажете куда копать?

Evgenii Legotckoi
  • 20. November 2019 02:50

Добрый день.

Вы используете QGraphicsItem? вообще побольшу бы кусок кода, чтобы иметь большее представление. Мысли есть, но не уверен

P
  • 20. November 2019 03:10
  • (bearbeitet)

да, есть классы наследуемые от QGraphicsItem.
в программе при нажатии определенных кнопок(слева на картинке), на сцене появляются Item-ы
с разными настройками. в конструкторе ни чего особого нет,только координаты,название,тултип.

перевод загружается так

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QTranslator translator;
    translator.load(QString("Language_en"));
    a.installTranslator(&translator);
    MainWindow w;
    w.show();

    return a.exec();
}
Evgenii Legotckoi
  • 20. November 2019 03:25
  • (bearbeitet)

Вообще, метод tr является частью класса QObject, если он у вас используется в конструкторе, то вы должны были использовать множественное наследование для вашей кастомной кнопки. Поскольку графические объекты одни из немногих классов, которые не наследуются от QObject, кроме QGraphicsObject, но там также множественное наследование используется.

То есть заголовочный код вашей кнопки должен выглядеть так

class Button : public QObject, public QGraphicsItem
{
    Q_OBJECT
public:
    /* и так далее */
}

Убедитесь, что у вас присутсвует макрос Q_OBJECT, он отвечает за мета информацию и включение возможности перевода.

Если же вы не наследовались от QObject, то перевод можно также включить с помощью другого макроса

class Button : public QGraphicsItem
{
    Q_DECLARE_TR_FUNCTIONS(Button)
public:
    /* и так далее */
}
Evgenii Legotckoi
  • 20. November 2019 03:30

И в качестве дополнения из личного опыта. Пишите лучше все тексты на английском языке в функциях tr )))

P
  • 20. November 2019 03:43

у меня множественное наследование.
сначала основной класс myitem

class myItem : public QObject, public QGraphicsItem
{
    Q_OBJECT
    Q_INTERFACES(QGraphicsItem)
public:
    myItem(int x, int y, int w, int h);
    .....
    .....
    ..

со всякими переменными.

а потом от него все остальные , которые появляются на сцене.

"Пишите лучше все тексты на английском языке в функциях tr"
понимаю, просто программа очень спецефическая(это конфигуратор для устройства на микроконтроллере)
и не планировалась для других языков. но потом подтянулись иностранные граждане и попросили перевести..

Evgenii Legotckoi
  • 20. November 2019 03:55

Покажите, как выглядит реализация конструктора. Поскольку на данный момент я не вижу причин, чтобы переводы не работали.

P
  • 20. November 2019 04:02
myButton::myButton(int x, int y, int w, int h) : myItem (x, y, w, h)
{
  static int i = 1;
  myVar.text = "Btn" + QString::number(i++);
  myVar.myType = typeSimpleButton;
  this->setToolTip(tr("Кнопка"));
  myVar.func_read = 1;
  configVisibleWidgets |= 1<<visibleSettings::Hsize | 1<<visibleSettings::Wsize
      | 1<<visibleSettings::Color1 | 1<<visibleSettings::ColorText | 1<<visibleSettings::Color2
      | 1<<visibleSettings::TextEdit | 1<<visibleSettings::ModbusWrite
      | 1<<visibleSettings::Toggle | 1<<fontSizeSelect | 1<<itSlave;
}
myItem::myItem(int x, int y, int w, int h)
{
  myVar.rect.x =x;
  myVar.rect.y=y;
  myVar.rect.w=w;
  myVar.rect.h=h;
  setFlags(QGraphicsItem::ItemIsMovable |
           QGraphicsItem::ItemIsSelectable |
           QGraphicsRectItem::ItemIsFocusable);
}
P
  • 20. November 2019 04:14

при этом тултипы заданные в редакторе форм переводятся...

Evgenii Legotckoi
  • 20. November 2019 04:29

проблема в конструкторе, напишите так

myItem::myItem(int x, int y, int w, int h) : QObject()
{
  myVar.rect.x =x;
  myVar.rect.y=y;
  myVar.rect.w=w;
  myVar.rect.h=h;
  setFlags(QGraphicsItem::ItemIsMovable |
           QGraphicsItem::ItemIsSelectable |
           QGraphicsRectItem::ItemIsFocusable);
}
P
  • 20. November 2019 05:05

добавил : QObject()
ни чего не изменилось.

ладно. что-нибудь придумаю

Evgenii Legotckoi
  • 20. November 2019 05:08

Тогда хоть убейте, не знаю. Где-то не хватает или макроса или корректной реализации конструктора.

Kommentare

Nur autorisierte Benutzer können Kommentare posten.
Bitte Anmelden oder Registrieren
Letzte Kommentare
A
ALO1ZE19. Oktober 2024 08:19
Fb3-Dateileser auf Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь Максимов5. Oktober 2024 07:51
Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas55. Juli 2024 11:02
QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssr8. Februar 2024 18:43
Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Jetzt im Forum diskutieren
J
JacobFib17. Oktober 2024 03:27
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
JW
Jhon Wick1. Oktober 2024 15:52
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Кирилл Гусарев27. September 2024 09:09
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
F
Fynjy22. Juli 2024 04:15
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

Folgen Sie uns in sozialen Netzwerken