Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Отображение русских букв в QTableView
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Разработка баз данных
bynet
QSqlQuery query;
query.exec("create table company (id int primary key, "
"namecompany varchar(20), adresscompany varchar(20))");

query.exec("insert into company values(1, 'Название предприятия', 'Адрес предприятия')");

затем

model = new QSqlTableModel(this);

model->setTable("company");
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->select();

view->setModel(model);

В таблице вместо Название предприятия и Адрес предприятия выдает краказяюли.
Как отобразить их в нармальном виде? Где именно ошибка при вставке в таблицу или при отображении?
Litkevich Yuriy
Цитата(bynet @ 4.7.2010, 18:34) *
Как отобразить их в нармальном виде? Где именно ошибка при вставке в таблицу или при отображении?
сказать Qt какую кодировку исходника ты используешь.
лучший вариант:
кодировка исходника в UTF-8 без маркера (w/o BOM)
строковые литералы помещать в trUtf8()
bynet
query.exec("insert into company values(1, 'Название предприятия', 'Адрес предприятия')");

1.мне писать так query.exec("insert into company values(1, trUtf8('Название предприятия'), trUtf8('Адрес предприятия')");

2. А можно в настройках QtCreator где нибудь задать руский тест? А то везде приходится использовать QString::fromLocal8Bit?
Litkevich Yuriy
Цитата(bynet @ 4.7.2010, 19:08) *
А можно в настройках QtCreator где нибудь задать руский тест?
что значит задать русский текст? Переключи раскладку клавиатуры и пиши по-русски.
bynet
Если я пишу по русски в программе все отображается краказябликами, QString::fromLocal8Bit - с ним все нормально.
Приведите хотябы небольшой пример, как мне занасить руские буквы в бд а потом считывать...
arial
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());

Где UTF-8 - кодировка исходников.
Litkevich Yuriy
arial, а зачем ты кодек локали меняешь, можешь объяснить?

Цитата(bynet @ 5.7.2010, 16:53) *
Если я пишу по русски в программе все отображается краказябликами
я тебе во втором сообщении уже написал, как нужно поступать
arial
Цитата(Litkevich Yuriy @ 5.7.2010, 16:28) *
arial, а зачем ты кодек локали меняешь, можешь объяснить?
Я пишу под вендой. В венде локаль Windows-1251. Если исходники в UTF-8, то приложение с кракозябами будет, если закоментировать эту строку. Если исходники в Windows-1251, то эта строка не нужна.
Litkevich Yuriy
Цитата(arial @ 6.7.2010, 12:55) *
Если исходники в UTF-8, то приложение с кракозябами будет
у меня тоже винда и тоже UTF-8, крокозаблов не наблюдаю, потому-что смотри сообщение номер 2
arial
Цитата(Litkevich Yuriy @ 6.7.2010, 13:46) *
у меня тоже винда и тоже UTF-8, крокозаблов не наблюдаю, потому-что смотри сообщение номер 2
Цитата(Litkevich Yuriy @ 4.7.2010, 15:57) *
сказать Qt какую кодировку исходника ты используешь.
Хорошо. Каким образом? Я другого способа не нашёл.
arial
Цитата(arial @ 6.7.2010, 14:02) *
Хорошо. Каким образом? Я другого способа не нашёл.
Кажется разобрался.

Раньше я делал так:
int main(int argc, char *argv[])
{
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
    QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
    QTextCodec::setCodecForTr(QTextCodec::codecForLocale());

    QApplication a(argc, argv);

    const QString title = QString::fromLocal8Bit("Заголовок");
    const QString text = QString::fromLocal8Bit("Текст");
    QMessageBox mb(QMessageBox::NoIcon, title, text, QMessageBox::Ok);
    mb.show();

    return a.exec();
}
Сейчас сделал так:
int main(int argc, char *argv[])
{
    QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
    QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));

    QApplication a(argc, argv);

    const QString title = QObject::tr("Заголовок");
    const QString text = QObject::tr("Текст");
    QMessageBox mb(QMessageBox::NoIcon, title, text, QMessageBox::Ok);
    mb.show();

    return a.exec();
}
Litkevich Yuriy
Цитата(Litkevich Yuriy @ 4.7.2010, 18:57) *
лучший вариант:
кодировка исходника в UTF-8 без маркера (w/o BOM)
строковые литералы помещать в trUtf8()
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.