Russian Qt Forum
Ноябрь 24, 2024, 12:49 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Qt + русский текст  (Прочитано 12686 раз)
Antiglobalist
Гость
« : Ноябрь 12, 2010, 09:55 »

Подскажите как работать с русским текстом в коде?При вводе такого имени базы подключение не проходит
Код:
    db.setDatabaseName("Справочник");
    db.setUserName("root");
    db.setPassword("1234567");
Тоже самое и с запросами
Код:
query.exec("insert into per values(102, 'Иван', 'Петров')");
В базе ничего не появляется ...
С латинскими всё нормально.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Ноябрь 12, 2010, 10:01 »

Не используй кирилицу в коде.
db.setDatabaseName(tr ("Reference"));
И потом переводишь.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
UVV
Гость
« Ответ #2 : Ноябрь 12, 2010, 10:17 »

> db.setDatabaseName("Справочник");
> query.exec("insert into per values(102, 'Иван', 'Петров')");
За это по рукам линейкой давать надо...
Записан
Antiglobalist
Гость
« Ответ #3 : Ноябрь 12, 2010, 10:56 »

Написал
Код:
    QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("localhost");
    db.setDatabaseName(QObject::tr("Reference"));
    db.setUserName("root");
    db.setPassword("1234567");
Но в базу так и не зашло , быть может тут уже проблема в кодировке?Или я что то не так понял ...
База MySQL кодировка сервера cp1251
При работе в ней через командную строку русский текст не отображает , приходится прописывать set name cp866(Dos-Russia)
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Ноябрь 12, 2010, 11:03 »

1. Читай про локализацию в Qt.
2. Не стоит давать БД название на кирилице.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Denjs
Гость
« Ответ #5 : Ноябрь 12, 2010, 11:45 »

Написал
Код:
    QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("localhost");
    db.setDatabaseName(QObject::tr("Reference"));
    db.setUserName("root");
    db.setPassword("1234567");
Но в базу так и не зашло , быть может тут уже проблема в кодировке?Или я что то не так понял ...
База MySQL кодировка сервера cp1251
При работе в ней через командную строку русский текст не отображает , приходится прописывать set name cp866(Dos-Russia)
1) "MySQL кодировка сервера cp1251" -> use UTF-8, Dude.
2) "Но в базу так и не зашло" -> Какие _именно_ ошибки? вы Qt-MySQL плагин собирали?
3) После того как убедитесь что ваши исходники в UTF-8, на всякий случай добавьте в код
Код:
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForCString(QTextCodec::codecForName("UTF-8"));
4) "При работе в ней через командную строку русский текст не отображает, приходится прописывать set name cp866(Dos-Russia)" -> уж не потому ли что консоль в венде до сих пор в досовской кодировке? это к делу в общем не относится. теоретически можно сделать аналогичный запрос в программе, но с UTF-8 - потому что кодировка всех QString "внутри" - UTF-8.
где-то так.
« Последнее редактирование: Ноябрь 12, 2010, 11:48 от Denjs » Записан
BRE
Гость
« Ответ #6 : Ноябрь 12, 2010, 13:06 »

потому что кодировка всех QString "внутри" - UTF-8.
где-то так.
Внутри QString не UTF8. Подмигивающий
Записан
Denjs
Гость
« Ответ #7 : Ноябрь 12, 2010, 13:47 »

потому что кодировка всех QString "внутри" - UTF-8.
где-то так.
Внутри QString не UTF8. Подмигивающий
ну подумаешь спутал "Unicode Character string" c UTF-8))) каюсь-каюсь)
Записан
tim474
Гость
« Ответ #8 : Ноябрь 12, 2010, 20:20 »

А саму базу данных в UTF8 перевести возможности нету?
Записан
Antiglobalist
Гость
« Ответ #9 : Ноябрь 13, 2010, 00:37 »

Возможности безграничны)Пишу лабу "Телефнный сравочник".
Нужно чтобы данные в таблицах были на русском языке а остальные пофиг ...
Раньше просто не приходилсь в Qt работать с базой.
Советуете базу перевести в utf8 и так работать?

Плагины собраны , запрос типа
Код:
query.exec("create table per(id int primary key, "
                   "firstname varchar(20), lastname varchar(20));");
Проходит отлично , если же ввести в этом запросе что нить с русским , возвращает false
Пробывал сделать запрос таким спосбом
Код:
    QString str,strF = "insert into table per(id, firstname, lastname)"
                  "values(%1,'%2','%3');";
    str=strF.arg("25")
            .arg("Show")
            .arg("Call");
    if(!query.exec(str))
Тоже false.
А через бинВалуе
Код:
    query.prepare("Insert into per(id, firstname, lastname) values(:id,:firstname,:lastname);");
    query.bindValue(":id",25);
    query.bindValue(":firstname","qwer");
    query.bindValue(":lastname","OLOL")
Выдает на каждую строку по ошибке No matching function
Записан
tim474
Гость
« Ответ #10 : Ноябрь 13, 2010, 03:08 »

А setCodecForCStrings не помогает?
Записан
Antiglobalist
Гость
« Ответ #11 : Ноябрь 13, 2010, 07:13 »

Спасибо всем , решил проблему =)
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #12 : Ноябрь 13, 2010, 08:28 »

Antiglobalist: у нас принято рассказывать как решил проблему.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
mapron
Гость
« Ответ #13 : Ноябрь 13, 2010, 13:22 »

у меня была та же проблема , решается QString::fromUtf8("русскыя буковы");
Все дело втом, что в QString данные хранятся, не в UTF-8 а в UCS-2.
Для получения этой строки из других форматов имеются статичные члены.
Надо читать маны чуть-чуть Улыбающийся
« Последнее редактирование: Ноябрь 13, 2010, 13:24 от mapron » Записан
Antiglobalist
Гость
« Ответ #14 : Ноябрь 16, 2010, 16:00 »

    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));
    QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
Прописал не после QAp а в другом файле перед созданием подключения.
В этом и были все проблемы.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.052 секунд. Запросов: 23.