其他语言的 Qt 键盘输入

Posted

技术标签:

【中文标题】其他语言的 Qt 键盘输入【英文标题】:Qt keyboard input in other language 【发布时间】:2018-01-23 16:58:39 【问题描述】:

在文字处理器中,当我将字体更改为Preeti 时,键入“asdfgh”将导致显示“बकमानज”。我尝试将QPlainTextEdit 的字体更改为Preeti,但它仍在输入“asdfgh”

如何在 Qt 中实现相同的功能?

这是我正在做的事情:

@pyqtSlot()
def select_font(self):
    font, ok = QFontDialog.getFont(self)
    if ok:
        ## the text in ui.text_edit is in unicode
        self.ui.text_edit.setFont(font)

显然该字体存在于系统中。字体的显示也是正确的(从 .txt 文件加载时)。什么不起作用是输入该字体。我说的是从键盘到所选字体的键映射。

c++ 或 python 中的帮助:语言在这里无关紧要。

【问题讨论】:

其他字体有用吗? Preeti 是否适用于其他“标准”应用程序(例如您的基本文本编辑器,无论是记事本、Gedit 还是其他)。 当您的文字处理器在 Preeti 字体中找不到 a..s 时,可能没有正确回退到拉丁字体,而只是从 Preeti 中选择了一些东西作为替代? 【参考方案1】:

您的应用程序可能无法识别该字体。检查是否已安装字体。您也可以尝试将preeti.ttf 文件添加到资源中,然后使用以下命令将其添加到应用程序中:

QFontDatabase::addApplicationFont(“:/fonts/preeti.ttf”);

我发现样式表在设置字体方面更可靠(比使用setFont(QFont))。使用textEdit->setStyleSheet(font-family: 'Preeti');

编辑

从 QFontDialog() 设置样式表可以在 python 中通过以下方式完成

@pyqtSlot()
def select_font(self):
    font, ok = QFontDialog.getFont(self)
    if ok:
        params = font.toString().split(",") # The string is :"Preeti,9,-1,5,50,0,0,0,0,0"
        self.ui.text_edit.setStyleSheet("font-family :%s;font-size:%spt;" % (params[0], params[1]))

【讨论】:

我已对问题进行了编辑。问题不在于系统中是否存在字体。 我自己刚刚测试了这个(使用QLabel)。为小部件设置 QFont 不起作用。相反,我唯一的选择是使用setStyleSheet("font-family: Preeti;")html 标记也不起作用。 你能在你的系统中测试一下并告诉我吗?如果可行,我可以更改答案。 这里的事情看起来很复杂,现在字符显示正确。但是保存 TextEdit::plainText() 不会从字体创建 unicode 映射。有没有办法将我输入的内容转换成 unicode?​​span> 我不希望您获得 Unicode 文本,因为您只是更改普通字母数字字符的字体。您可能必须为此编写一个映射器函数。

以上是关于其他语言的 Qt 键盘输入的主要内容,如果未能解决你的问题,请参考以下文章

笔记本电脑键盘设置

Qt 中的键盘输入

PyQt5-Qt Designer简易的数字键盘输入

Qt Raspberry Pi 3 Linux 键盘输入

qt for android 怎样弹出键盘

Qt实用技巧:将QWidget作为输入窗口,接收键盘消息输入法并且控制输入法悬浮工具栏位置控制