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

Qt-样式更改导致错误(缺少OpenType支持),qt,styles,qt-creator,opentype,Qt,Styles,Qt Creator,Opentype,我的UI上有一个简单的QlineEdit。它允许我输入印地语字符,从谷歌翻译器复制并粘贴-जॉन 但是当我使用样式表更改任何样式时,例如颜色更改为红色。现在如果我粘贴相同的印地语文本जॉन 它显示立方体框代替字符,我得到的输出消息是脚本缺少OpenType支持 我还尝试了使用两个编辑框,其中一个在样式表中定义了颜色,我在另一个编辑框上也看到了框,尽管我根本没有接触过它的样式 无需代码,只需创建hello world程序,在designer中添加一个编辑框,定义一个或多个样式,例如样式表中的颜色

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

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

我还尝试了使用两个编辑框,其中一个在样式表中定义了颜色,我在另一个编辑框上也看到了框,尽管我根本没有接触过它的样式

无需代码,只需创建hello world程序,在designer中添加一个编辑框,定义一个或多个样式,例如样式表中的颜色,并尝试粘贴印地语字符जॉन


谁能帮我一下吗

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

MainWindow::MainWindowQWidget*父: QMainWindowparent, uinewui::主窗口 { ui->setupUithis

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();
}!![在此处输入图像描述][1]

这似乎不是一个好的解决方案,但在这里通过一些尝试和错误。据我所知,我正在加载Qt已经支持的字体,就像hello world程序一样,它工作得很好,直到我在UI中添加了一个按钮

我现在在做什么? 我正在创建lineedit,为其设置字体,然后在其上设置印地语测试。然后隐藏该行编辑,因为我不需要它

由于完成了上面提到的所有操作,现在我的UI允许我将不同语言的文本粘贴到同一UI屏幕上的其他行编辑中-请参阅附件


我发现的似乎是愚蠢的解决方案,但没有这行编辑将显示印地语文本框。我使用版本控制测试了我的工作hello world和非工作hello world程序之间的差异。代码中并没有差异,所以QT工具运行时突然忘记了印地语,然后再也听不懂了。但是我的工作使UI能够理解印地语和相关语言。

您是否绑定字体以确保始终能够呈现所选语言?我使用的是Qt 5。现在意识到,即使没有样式,也可以看到这个问题。所以它是随机的。我从helloworld程序开始,它有一个ui元素editbox。我希望能够粘贴印地语字符的地方。感谢所有回复。我试着自己设置字体和字体系列。但现在看来,即使我完全删除了样式,也会出现这种问题。现在我的代码中没有样式,它只工作过一次,现在不工作了。这完全是随机的。在我的例子中,怎么可能有一个用户界面只接受一次而不是以后接受某些unicode字符印地语呢。我遗漏了什么吗?非常感谢您的帮助。需要更多信息。它工作时和不工作时应该有所不同。不过,我很确定,原因是-你使用的字体。它是主要的东西,负责绘制字形。我用一个editbox重新创建了新的hello world应用程序,效果很好。添加了一个按钮来显示空对话框,没有其他代码。然后将印地语文本复制粘贴到编辑框,再次开始显示框जॉन; 同样,只有当我尝试在editbox中粘贴印地语文本时,才会看到框。我的结论是:我需要加载字体,尽管Qt已经支持印地语,我需要将印地语文本设置为类似的小部件之一。现在,一个人将能够使用他的另一个小部件来做他想做的事情。很奇怪。。但这是唯一一个持续有效的方案。专家们善意地建议,我错在哪里