Qt - 样式更改导致错误(缺少 OpenType 支持)

问题描述 投票:0回答:2

我的 UI 上有一个简单的 QlineEdit。它允许我输入印地语字符(从谷歌翻译复制并粘贴) - (जॉन)

但是当我使用样式表更改任何样式时,例如颜色变为红色。现在,如果我粘贴相同的印地语文本 (जॉन),它会显示立方体(框)来代替字符,并且我会收到输出消息“脚本缺少 OpenType 支持”

我还尝试使用两个编辑框,其中一个编辑框具有样式表中定义的颜色,我也看到其他编辑框上的框(即使我根本没有触及它的样式)

不需要任何代码,只需创建hello world程序,在设计器中添加一个编辑框,定义1个或多个样式,例如在样式表中着色并尝试粘贴印地语字符“जॉन”

有人可以帮我解决这个问题吗?

qt styles qt-creator opentype
2个回答
0
投票

我的猜测是 - 当您更改小部件的样式表时,您的字体会更改为一种,这不支持印地语。为了解决这个问题,您需要找出 Qt 在系统中默认使用哪种字体,并将其设置在相同的样式表字符串中。


0
投票
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 能够理解印地语和相关语言。

© www.soinside.com 2019 - 2024. All rights reserved.