Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt GUI _ Qt и Юникод

Автор: potkin 20.8.2010, 12:20

Надо потдержку "мультиязычности".
Подскажите как сделать так, чтоб QT понимал все Кодировки в Гуи и в БД также.

Пишу в mail.cpp

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Login log;
    log.show();

    QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));   //Кирилица

    return a.exec();
}


При сохранениее в БД выдаёт ошибку:
Цитата
The database reported an error: Incorrect string value: '\xD0\xBF\xD0\xBF\xD0\xBF' for column 'lastname' at row 1 QMYSQL3: Unable to execute statement


Цитата
Кодировки, поддерживаемые в Qt 4.3:
Apple Roman
Big5
Big5-HKSCS
EUC-JP
EUC-KR
GB18030-0
IBM 850
IBM 866
IBM 874
ISO 2022-JP
ISO 8859-1 — ISO 8859-10
ISO 8859-13 — ISO 8859-16
Iscii-Bng, Dev, Gjr, Knd, Mlm, Ori, Pnj, Tlg, and Tml
JIS X 0201
JIS X 0208
KOI8-R
KOI8-U
MuleLao-1
ROMAN8
Shift-JIS
TIS-620
TSCII
UTF-8
UTF-16
UTF-16BE
UTF-16LE
Windows-1250 — Windows-1258
WINSAMI2


Мне надо, чтоб потдерживались все Кодировки, реально ???

Автор: molchanoviv 20.8.2010, 12:58

А чем юникод не устраивает?

Автор: Litkevich Yuriy 20.8.2010, 14:26

Цитата(potkin @ 20.8.2010, 16:20) *
При сохранениее в БД выдаёт ошибку:
при сохранении чего?

Автор: potkin 20.8.2010, 16:03

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Login log;
    log.show();

    QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));   //Юникод

    return a.exec();
}


Получаю "Иероглифы".

Litkevich Yuriy
Цитата
при сохранении чего?


Показать:
model = new QSqlTableModel();
    model->setTable("users");
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);
   if (model->select())
    {

        model->setHeaderData(0, Qt::Horizontal, tr("ID"));
        model->setHeaderData(1, Qt::Horizontal, tr("First name ??\????ueeeruuuu"));
        model->setHeaderData(2, Qt::Horizontal, tr("Last name"));
        model->setHeaderData(3, Qt::Horizontal, tr("Post"));

        ui->tVUsers->setModel(model);
        ui->tVUsers->resizeColumnsToContents();
    }
    else
    {
        model->database().rollback();
        QMessageBox::warning(this, tr("Cached Table"),
                            tr("The database reported an error: %1")
                            .arg(model->lastError().text()));
    }

Сохранить:
    model->database().transaction();
    if (model->submitAll()) {
        model->database().commit();
    } else {
        model->database().rollback();
        QMessageBox::warning(this, tr("Cached Table"),
                             tr("The database reported an error: %1")
                             .arg(model->lastError().text()));
    }


Сохраняло только ланиницей.

Но я разобрался, проблема была в МуСкуле. При создании таблиц добавил:
Цитата
ENGINE=MyISAM CHARACTER SET=utf8


А вот, если я хочу разместить Лейбел на форме, с текстом на Кыргиском, Азерском, ... языке. То получаю "квадратики".
Интерестно, как исправить ???

Автор: Litkevich Yuriy 21.8.2010, 8:00

Цитата(potkin @ 20.8.2010, 20:03) *
с текстом на Кыргиском, Азерском, ... языке.
лучший путь - написать по английски, а потом сделать перевод.
худший - использовать исходник в UTF-8, далее строковые литералы оборачивать в QObject::trUtf8()

Ещё более худший:
все исходники в кодировке X
в функции main
QTextCodec::setCodecForTr(QTextCodec::codecForName("X"));
далее строковые литералы оборачивать в QObject::tr()

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)