我的 UI 上有一个简单的 QlineEdit。它允许我输入印地语字符(从谷歌翻译复制并粘贴) - (जॉन)
但是当我使用样式表更改任何样式时,例如颜色变为红色。现在,如果我粘贴相同的印地语文本 (जॉन),它会显示立方体(框)来代替字符,并且我会收到输出消息“脚本缺少 OpenType 支持”
我还尝试使用两个编辑框,其中一个编辑框具有样式表中定义的颜色,我也看到其他编辑框上的框(即使我根本没有触及它的样式)
不需要任何代码,只需创建hello world程序,在设计器中添加一个编辑框,定义1个或多个样式,例如在样式表中着色并尝试粘贴印地语字符“जॉन”
有人可以帮我解决这个问题吗?
我的猜测是 - 当您更改小部件的样式表时,您的字体会更改为一种,这不支持印地语。为了解决这个问题,您需要找出 Qt 在系统中默认使用哪种字体,并将其设置在相同的样式表字符串中。
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QStringList fileList;
fileList<<"akshar.ttf"<<"DroidSansDevanagari-Regular.ttf"<<"aparaj.ttf";
fileList<<"chandas.ttf"<<"mangal.ttf"<<"Kruti_Dev_010.ttf";
QStringList::const_iterator constIterator;
for (constIterator = fileList.constBegin(); constIterator != fileList.constEnd(); ++constIterator)
{
QFile res(":/new/prefix1/" + *constIterator);
if (res.open(QIODevice::ReadOnly))
{
if (QFontDatabase::addApplicationFontFromData(res.readAll()) != -1) {
qDebug()<<"successfully loaded font " + *constIterator;
}
else
{
qDebug()<<"failed to load font " + *constIterator;
}
}
else
{
QString errMsg;
errMsg = res.errorString();
qDebug()<<"font file open failed : = " + errMsg ;
}
res.close();
QFont font;
font.setFamily("akshar");
QApplication::setFont(font);
// QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
}
ui->lineEdit->setFont(QFont("akshar", 10));
ui->lineEdit->setFont(QFont("mangal", 10));
ui->lineEdit->setText(QObject::tr("जॉन"));
ui->lineEdit->hide();
}
这似乎不是一个好的解决方案,但在这里通过一些尝试和错误。我正在加载字体(据我所知 Qt 已经支持),就像 hello world 程序一样,它运行良好,直到我向 UI 添加一个按钮。
我现在在做什么? 我正在创建 lineedit,为其设置字体,然后对其设置印地语测试。然后隐藏这个 LineEdit,因为我不需要它。
由于完成了我上面提到的所有操作,现在我的 UI 允许我将不同语言的文本粘贴到同一 UI 屏幕上的其他行编辑中 - 请参阅附件。
我发现的解决方案似乎很愚蠢,但如果没有这行编辑,将显示印地文文本框。我使用版本控制测试了我的工作 hello world 和非工作 hello world 程序之间的差异,代码没有区别,所以不知何故 QT 工具运行时突然忘记了 HINDI,然后永远无法理解它。但我的工作是让 UI 能够理解印地语和相关语言。