[Решено] Qt, Linux, Windows, математические спецсимволы, квадратики.

Модератор: Модераторы разделов

Аватара пользователя
Eronex
Сообщения: 106
ОС: Ubuntu

[Решено] Qt, Linux, Windows, математические спецсимволы, квадратики.

Сообщение Eronex »

При переносе кода из Linux в Windows, написанного в Qt-Creator, перестали отображаться математические спецсимволы, вместо них квадраты.
Вот эта таблица: http://www.templatebest.ru/specsimvol.php, из браузера отображает символы под виндовсом, но в Qt-приложении почему то нет. "Больше или равно" например не отображается, хотя "пустое множество" отображается. В линуксе всё работает как надо.
Использую функцию QString::fromUtf8(), проект настроен на манипулирование исходным кодом в кодировке UTF-8. В Qt-Creator'е тоже некоторые символы не отображаются, как и в самой программе, а рисуются квадратиками. Пробовал QChar(код_символа), эффект тот-же.

Почему так?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Спасибо сказали:
Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable

Re: [Решено] Qt, Linux, Windows, математические спецсимволы, квадратики.

Сообщение Portnov »

Шрифты?
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:
Аватара пользователя
Eronex
Сообщения: 106
ОС: Ubuntu

Re: [Решено] Qt, Linux, Windows, математические спецсимволы, квадратики.

Сообщение Eronex »

Portnov писал(а):
16.03.2011 09:42
Шрифты?

Пробовал устанавливать "Liberation Fonts" в Виндовс и использовать их соответственно в программе для вывода, но результат всё тот же.
Спасибо сказали:
Аватара пользователя
Eronex
Сообщения: 106
ОС: Ubuntu

Re: [Решено] Qt, Linux, Windows, математические спецсимволы, квадратики.

Сообщение Eronex »

Добавил скрины в первый пост.
Спасибо сказали:
Аватара пользователя
Crazy
Сообщения: 862
Статус: Адепт Дзен.
ОС: Mint, Win7.

Re: [Решено] Qt, Linux, Windows, математические спецсимволы, квадратики.

Сообщение Crazy »

QTextCodec устанавливал?

Код: Выделить всё

QTextCodec *utfcodec = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForTr(utfcodec);



Desipere in loco
Спасибо сказали:
Аватара пользователя
Eronex
Сообщения: 106
ОС: Ubuntu

Re: [Решено] Qt, Linux, Windows, математические спецсимволы, квадратики.

Сообщение Eronex »

Crazy писал(а):
17.03.2011 21:42
QTextCodec устанавливал?

Код: Выделить всё

QTextCodec *utfcodec = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForTr(utfcodec);

Попробовал, не помогло.


Заметил ещё вот что. Код

Код: Выделить всё

qs_formula+=trUtf8(" \u03A3 \u00e9  ⇒ ");
выводит три символа: "прописная сигма", "e" c надчёркиванием, и пустой квадрат. У нас в браузере видна "стрелка вправо" вместо квадрата. Если же написать вот так:

Код: Выделить всё

qs_formula+=trUtf8(" \u21D2 \u00e9  ⇒ ");
, то будет отображаться уже два квадрата и всего один правильно отображаемый символ "e". "\u21D2" -- это "⇒".

То есть получается по каким-то внутренним причинам Qt отсеивает некоторый диапазон символов, заменяя их нулевыми, причём происходит это лишь в Windows. И дело не в шрифтах, потому что в браузере символы отображаются корректно.

Решение пока так и не найдено...
Спасибо сказали:
Аватара пользователя
DiS
Сообщения: 296
ОС: Gentoo

Re: [Решено] Qt, Linux, Windows, математические спецсимволы, квадратики.

Сообщение DiS »

Eronex писал(а):
16.03.2011 11:15
Пробовал устанавливать "Liberation Fonts"

В Liberation интересующих Вас символов нет, попробуйте например шрифты DejaVu.
Если правильно задать вопрос, то он сам по себе будет ответом.
Спасибо сказали:
Аватара пользователя
Crazy
Сообщения: 862
Статус: Адепт Дзен.
ОС: Mint, Win7.

Re: [Решено] Qt, Linux, Windows, математические спецсимволы, квадратики.

Сообщение Crazy »

Eronex писал(а):
19.03.2011 16:16
Заметил ещё вот что. Код

Код: Выделить всё

qs_formula+=trUtf8(" \u03A3 \u00e9  ⇒ ");
выводит три символа: "прописная сигма", "e" c надчёркиванием, и пустой квадрат. У нас в браузере видна "стрелка вправо" вместо квадрата. Если же написать вот так:

Код: Выделить всё

qs_formula+=trUtf8(" \u21D2 \u00e9  ⇒ ");
, то будет отображаться уже два квадрата и всего один правильно отображаемый символ "e". "\u21D2" -- это "⇒".

То есть получается по каким-то внутренним причинам Qt отсеивает некоторый диапазон символов, заменяя их нулевыми, причём происходит это лишь в Windows. И дело не в шрифтах, потому что в браузере символы отображаются корректно.

Решение пока так и не найдено...

Если правильно понял Qt Assistant, то можно выбрать несколько шрифтов

Код: Выделить всё

 QFont f("Helvetica [Cronyx]");

Или фабрику, возвращающая различные QFonts, и устанавливающая в QApplication::setFont
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Desipere in loco
Спасибо сказали:
Аватара пользователя
Eronex
Сообщения: 106
ОС: Ubuntu

Re: [Решено] Qt, Linux, Windows, математические спецсимволы, квадратики.

Сообщение Eronex »

Crazy, спасибо за скриншот! Воспрозвёл как у Вас, символы отобразились! :)


DiS писал(а):
19.03.2011 16:44
Eronex писал(а):
16.03.2011 11:15
Пробовал устанавливать "Liberation Fonts"

В Liberation интересующих Вас символов нет, попробуйте например шрифты DejaVu.

DiS, и правда, установка DejaVu шрифтов решила проблему. Как их теперь с собой взять? Пробовал помещать в каталог с исполняемым файлом, результат отрицательный. Qt видит только установленные в систему шрифты?


DiS писал(а):
19.03.2011 16:44
Eronex писал(а):
16.03.2011 11:15
Пробовал устанавливать "Liberation Fonts"

В Liberation интересующих Вас символов нет...

Тогда каким образом Firefox отображает их с жёстко заданными настройками шрифта на "Liberation Fonts"?



Lucida Sans Unicode
The font comes preinstalled with all Microsoft Windows versions since Windows 98

Переводится как: "шрифт предустановлен на все версии мастдайки, начиная с 98-й". Это, по всей видимости, единственный шрифт в Windows XP, нормально поддерживающий Юникод. Воспользуюсь им. И всё же вопрос "взятия с собой" шрифтов приложением Qt пока остаётся открытым...
Спасибо сказали:
Аватара пользователя
Crazy
Сообщения: 862
Статус: Адепт Дзен.
ОС: Mint, Win7.

Re: [Решено] Qt, Linux, Windows, математические спецсимволы, квадратики.

Сообщение Crazy »

Не пробовал, но может QFontDatabase::addApplicationFont поможет

Desipere in loco
Спасибо сказали:
Аватара пользователя
Crazy
Сообщения: 862
Статус: Адепт Дзен.
ОС: Mint, Win7.

Re: [Решено] Qt, Linux, Windows, математические спецсимволы, квадратики.

Сообщение Crazy »

Файл ресурсов

Код: Выделить всё

 <!DOCTYPE RCC><RCC version="1.0">
 <qresource>
     <file alias="Liberation">LiberationMono-Regular.ttf</file>
 </qresource>
 </RCC>


Использование

Код: Выделить всё

    QFontDatabase::addApplicationFont(":/Liberation");

    QFont font;
    font.setPointSize(33);
    ui->m_label->setFont(font);
    ui->m_label->setText(trUtf8(" \u03A3 \u00e9  ? ") + "\n" + trUtf8(" \u21D2 \u00e9  ? "));

    ui->m_labeltwo->setFont(QFont("Liberation Mono", 33));
    ui->m_labeltwo->setText(trUtf8(" \u03A3 \u00e9  ? ") + "\n" + trUtf8(" \u21D2 \u00e9  ? "));

    bool ok;
    QFontDialog::getFont(&ok, this);

Desipere in loco
Спасибо сказали:
Аватара пользователя
Eronex
Сообщения: 106
ОС: Ubuntu

Re: [Решено] Qt, Linux, Windows, математические спецсимволы, квадратики.

Сообщение Eronex »

[Решено]
Спасибо сказали:
Аватара пользователя
Denjs
Сообщения: 1685
ОС: SuSe 10.2

Re: [Решено] Qt, Linux, Windows, математические спецсимволы, квадратики.

Сообщение Denjs »

в догонку - мои "5 копеек ребром" как альтернативный немного путь. отображение символа Пи.

Код: Выделить всё

    QChar pi_small=QChar::QChar ( 960 );
    QChar pi_big=QChar::QChar ( 928 );
    QChar xi_small=QChar::QChar ( 958 );
    QLabel myLabel;
    myLabel.setText(QString("<span style=\" font-family:'Times New Roman'; font-size:16pt;\">").append(xi_small).append(pi_small).append(pi_big).append("</span>"));
    myLabel.show();
для тех кто будет позже искать
QDroid - Среда исполнения и фреймворк для QtScript.
OTPD - Открытые драйвера промышленных принтеров чеков и этикеток (кроссплатформенная подсистема печати).
Спасибо сказали: