2016-12-25 8 views
0

Я должен отображать некоторые специальные символы, такие как ¼, ½ и т. Д. В QTextEdit, которые не находятся на QWERTY-клавиатуре. Я могу ввести эти символы в QTextEdit, а также в состоянии их вставить. Но когда я пытаюсь программно установить эти символы, QTextEdit отображает дополнительный символ «Â».QTextEdit не отображает специальные символы, недоступные на клавиатуре

Эта проблема не возникает при вводе и вставке. Эти символы вводятся с помощью некоторых кодов Alt + [code].

Я использую Qt 4.8 на Windows 8 64bit.

#include<QtGui> 

int main(int argc, char *argv[]) 
{ 
QApplication a(argc, argv); 
QTextEdit t; 
    t.setPlainText("¼2½ \n");    // QTextEdit displays=> ¼2½ 
    // t.setHtml("¼2½ \n");    // QTextEdit displays=> ¼2½ 
    // t.insertHtml("¼2½ \n");   // QTextEdit displays=> ¼2½ 
    // t.insertPlainText("¼2½ \n");  // QTextEdit displays=> ¼2½ 
// also tried setHtml() with HTML code which works in Firefox didn't help me 
    t.show(); 
    return a.exec(); 
} 

Как я могу поместить эти символы в QTextEdit программно без этого дополнительного символа?

ответ

0

Используйте QTextCodec для отображения символов в кодировке UTF-8.

#include <QTextCodec> 
... 
QTextCodec* codec=QTextCodec::codecForName("UTF-8"); 
// QTextCodec::setCodecForLocale(codec); //if you want everything to be in UTF-8 
QTextCodec::setCodecForCStrings(codec); 
QApplication a(argc, argv); 
... 

Или преобразовать символы в месте:

t.setPlainText(QObject::trUtf8("¼2½ \n")); 
+0

будет работать на протяжении всего приложения? Как QTextCodec связан с QTextEdit? Я имею в виду, нам не нужна функция setter() в QTextEdit/QApplication. – stackOverflow

+0

Я редактировал свой ансвер. Да, он будет работать во всем мире. QTextCodec устанавливает кодировку для всего приложения, поэтому ее следует установить в main(). В качестве альтернативы см. Вторую часть моего ответа. –

2

Ваш исходный код должен быть написан в UTF-8 кодировке, и вы должны использовать QStringLiteral в Qt 5 или QString::fromUtf8 в Qt 4. Вы выиграли» У меня есть такая проблема.

т.д .:

t.setPlainText(QStringLiteral("¼, ½")); // Qt 5 
t.setPlainText(QString::fromUtf8("¼, ½")); // Qt 4 

Убедитесь, что редактор вы используете устанавливается для кодирования файла в UTF-8, а не Latin 1 и т.д.