时间戳转换器

QTextEdit 不显示键盘上不可用的特殊字符

日期:2023-02-17     浏览:238    
【中文标题】QTextEdit 不显示键盘上不可用的特殊字符【英文标题】:QTextEdit doesn't display special characters not available on keyboard 【发布时间】:2016-12-25 13:44:40 【问题描述】:

我必须在 QTextEdit 中显示一些特殊字符,如 ¼、½ 等,这些字符不在 QWERTY 键盘上。我可以在 QTextEdit 中键入这些字符,也可以粘贴它们。但是当我尝试以编程方式设置这些字符时,QTextEdit 会显示一个额外的字符'Â'。

我在输入和粘贴时没有遇到这个问题。这些字符是用一些 Alt+[code] 代码键入的。

我在 Windows 8 64 位上使用 Qt 4.8。

#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 中?

【问题讨论】:

【参考方案1】:

您的源代码需要使用 UTF-8 编码编写,并且您应该在 Qt 5 中使用 QStringLiteral 或在 Qt 4 中使用 QString::fromUtf8。这样您就不会遇到这个问题了。

例如:

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

确保您使用的编辑器设置为将文件编码为 UTF-8,而不是拉丁文 1 等。

【讨论】:

【参考方案2】:

使用 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"));

【讨论】:

它会在整个应用程序中工作吗? QTextCodec 与 QTextEdit 有什么关系?我的意思是我们不需要 QTextEdit/QApplication 上的 setter() 函数吗? 我编辑了我的答案。是的,它将在全球范围内工作。 QTextCodec 为整个应用程序设置编码,所以它应该在 main() 中设置。或者,请参阅我的答案的第二部分。

相关文章

输入文本在 iOS 模拟器上不显示键盘

{】输入文本在iOS模拟器上不显示键盘【英文标题】:Inputtextdoesn\'tshowkeyboardoniOSsimulator【发布时间】:2016-04-3021:01:47【问题描述】:我正在构建一个应用程序,我需要使用输入文本。当您点击此输入文本时,问题出现了,键盘没...}

UIKeyInput 在 iPad 上不可用?

{...法-(void)deleteBackward,但是当代码在iPad上运行并且我按下键盘上的删除按钮时,它不会执行该方法。ipad上是否禁用了此协议?【问题讨论】:【参考方案1】:刚刚也遇到了这个问题。看起来iPad不允许UI}

jQuery UI 自动完成 - 西班牙语字符在本地正确显示,但在服务器上不正确

{】jQueryUI自动完成-西班牙语字符在本地正确显示,但在服务器上不正确【英文标题】:jQueryUIautocomplete-Spanishcharacterdisplayscorrectlylocallybutnotonserver【发布时间】:2017-05-1516:47:17【问题描述】:我正在使用jQueryAutocomplete,在我的本地...}

从文件名中删除特殊字符

{...外来字符的图像时,该图像确实会上传,但无法在网站上显示,就像该图像在服务器上不存在一样。我看到很多人在另一个帖子上回答说我需要使用preg_replace但问题是,我真的不知道如何使用它。我将}

外键在对象上不可用

{...【问题描述】:让我困惑的非常初级的问题。我在模板中显示外键ArtWorkImages时遇到问题,所以我想在视图中调试它,但外键ArtworkImage在Artwork上不可用:我的模特:fromdjango.dbimportmodelsclassArtwork(models.Model):tit}

mac特殊字符输入和编辑文本的快捷键

{...、表情符号类的字符点击状态栏上的【输入法】,点击【显示表情与符号】即可弹出}

QTextEdit 在调整大小时不显示水平滚动条

{】QTextEdit在调整大小时不显示水平滚动条【英文标题】:QTextEditdoesn\'tshowhorizontalscrollbaruponresizing【发布时间】:2014-09-1501:28:54【问题描述】:[已解决]我想设置QTextEdit文档的大小(比如8.5x11或3x5)。如果用户缩小视图,则应该出...}

在 Android 12 设备上获取 Android 广告 ID 的特殊处理和时间表

{...来源表明,从2021年底开始,Android广告ID将在Android12设备上不可用(它将是零字符串),届时用户将选择退出广告}

C++ 为啥 Traits 在对象上不可用,而是作为静态成员变量可用

{】C++为啥Traits在对象上不可用,而是作为静态成员变量可用【英文标题】:C++WhyTraitsarenotavailableonobjectsbutratherareavailableasstaticmembervariablesC++为什么Traits在对象上不可用,而是作为静态成员变量可用【发布时间】:2020-07-1105:25:03【...}

方法在项目中可用,但在操场上不可用

{】方法在项目中可用,但在操场上不可用【英文标题】:Methodavailableinprojectbutnotinplayground【发布时间】:2016-09-1712:08:31【问题描述】:我是Swift新手-使用Swift3、Xcode8.0beta6、MacOSX10.11.6。以下行在我的项目中有效(这是一个简单的...}

Copyright ©2021 时间戳转换器 小常识 114pp | 陕ICP备18005036号