[Решено] Qt, Linux, Windows, математические спецсимволы, квадратики.
Модератор: Модераторы разделов
-
Eronex
- Сообщения: 106
- ОС: Ubuntu
[Решено] Qt, Linux, Windows, математические спецсимволы, квадратики.
При переносе кода из Linux в Windows, написанного в Qt-Creator, перестали отображаться математические спецсимволы, вместо них квадраты.
Вот эта таблица: http://www.templatebest.ru/specsimvol.php, из браузера отображает символы под виндовсом, но в Qt-приложении почему то нет. "Больше или равно" например не отображается, хотя "пустое множество" отображается. В линуксе всё работает как надо.
Использую функцию QString::fromUtf8(), проект настроен на манипулирование исходным кодом в кодировке UTF-8. В Qt-Creator'е тоже некоторые символы не отображаются, как и в самой программе, а рисуются квадратиками. Пробовал QChar(код_символа), эффект тот-же.
Почему так?
Вот эта таблица: http://www.templatebest.ru/specsimvol.php, из браузера отображает символы под виндовсом, но в Qt-приложении почему то нет. "Больше или равно" например не отображается, хотя "пустое множество" отображается. В линуксе всё работает как надо.
Использую функцию QString::fromUtf8(), проект настроен на манипулирование исходным кодом в кодировке UTF-8. В Qt-Creator'е тоже некоторые символы не отображаются, как и в самой программе, а рисуются квадратиками. Пробовал QChar(код_символа), эффект тот-же.
Почему так?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
Portnov
- Модератор
- Сообщения: 1786
- Статус: Матёрый линуксоид
- ОС: Debian testing/unstable
Re: [Решено] Qt, Linux, Windows, математические спецсимволы, квадратики.
Шрифты?
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
-
Eronex
- Сообщения: 106
- ОС: Ubuntu
-
Eronex
- Сообщения: 106
- ОС: Ubuntu
Re: [Решено] Qt, Linux, Windows, математические спецсимволы, квадратики.
Добавил скрины в первый пост.
-
Crazy
- Сообщения: 862
- Статус: Адепт Дзен.
- ОС: Mint, Win7.
Re: [Решено] Qt, Linux, Windows, математические спецсимволы, квадратики.
QTextCodec устанавливал?
Код: Выделить всё
QTextCodec *utfcodec = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForTr(utfcodec);Desipere in loco
-
Eronex
- Сообщения: 106
- ОС: Ubuntu
Re: [Решено] Qt, Linux, Windows, математические спецсимволы, квадратики.
Crazy писал(а): ↑17.03.2011 21:42QTextCodec устанавливал?
Код: Выделить всё
QTextCodec *utfcodec = QTextCodec::codecForName("UTF-8"); QTextCodec::setCodecForTr(utfcodec);
Попробовал, не помогло.
Заметил ещё вот что. Код
Код: Выделить всё
qs_formula+=trUtf8(" \u03A3 \u00e9 ⇒ ");Код: Выделить всё
qs_formula+=trUtf8(" \u21D2 \u00e9 ⇒ ");То есть получается по каким-то внутренним причинам Qt отсеивает некоторый диапазон символов, заменяя их нулевыми, причём происходит это лишь в Windows. И дело не в шрифтах, потому что в браузере символы отображаются корректно.
Решение пока так и не найдено...
-
DiS
- Сообщения: 296
- ОС: Gentoo
Re: [Решено] Qt, Linux, Windows, математические спецсимволы, квадратики.
В Liberation интересующих Вас символов нет, попробуйте например шрифты DejaVu.
Если правильно задать вопрос, то он сам по себе будет ответом.
-
Crazy
- Сообщения: 862
- Статус: Адепт Дзен.
- ОС: Mint, Win7.
Re: [Решено] Qt, Linux, Windows, математические спецсимволы, квадратики.
Eronex писал(а): ↑19.03.2011 16:16Заметил ещё вот что. Кодвыводит три символа: "прописная сигма", "e" c надчёркиванием, и пустой квадрат. У нас в браузере видна "стрелка вправо" вместо квадрата. Если же написать вот так:Код: Выделить всё
qs_formula+=trUtf8(" \u03A3 \u00e9 ⇒ ");, то будет отображаться уже два квадрата и всего один правильно отображаемый символ "e". "\u21D2" -- это "⇒".Код: Выделить всё
qs_formula+=trUtf8(" \u21D2 \u00e9 ⇒ ");
То есть получается по каким-то внутренним причинам Qt отсеивает некоторый диапазон символов, заменяя их нулевыми, причём происходит это лишь в Windows. И дело не в шрифтах, потому что в браузере символы отображаются корректно.
Решение пока так и не найдено...
Если правильно понял Qt Assistant, то можно выбрать несколько шрифтов
Код: Выделить всё
QFont f("Helvetica [Cronyx]");Или фабрику, возвращающая различные QFonts, и устанавливающая в QApplication::setFont
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Desipere in loco
-
Eronex
- Сообщения: 106
- ОС: Ubuntu
Re: [Решено] Qt, Linux, Windows, математические спецсимволы, квадратики.
Crazy, спасибо за скриншот! Воспрозвёл как у Вас, символы отобразились! 
DiS, и правда, установка DejaVu шрифтов решила проблему. Как их теперь с собой взять? Пробовал помещать в каталог с исполняемым файлом, результат отрицательный. Qt видит только установленные в систему шрифты?
Тогда каким образом Firefox отображает их с жёстко заданными настройками шрифта на "Liberation Fonts"?
Переводится как: "шрифт предустановлен на все версии мастдайки, начиная с 98-й". Это, по всей видимости, единственный шрифт в Windows XP, нормально поддерживающий Юникод. Воспользуюсь им. И всё же вопрос "взятия с собой" шрифтов приложением Qt пока остаётся открытым...
DiS, и правда, установка DejaVu шрифтов решила проблему. Как их теперь с собой взять? Пробовал помещать в каталог с исполняемым файлом, результат отрицательный. Qt видит только установленные в систему шрифты?
Тогда каким образом 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, математические спецсимволы, квадратики.
Не пробовал, но может QFontDatabase::addApplicationFont поможет
Desipere in loco
-
Crazy
- Сообщения: 862
- Статус: Адепт Дзен.
- ОС: Mint, Win7.
Re: [Решено] Qt, Linux, Windows, математические спецсимволы, квадратики.
Файл ресурсов
Использование
Код: Выделить всё
<!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
-
Denjs
- Сообщения: 1685
- ОС: SuSe 10.2
Re: [Решено] Qt, Linux, Windows, математические спецсимволы, квадратики.
в догонку - мои "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();