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

时间:2015-05-06 08:33:55

标签: qt styles qt-creator opentype

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

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

此外,我尝试使用两个编辑框,其中一个编辑框在样式表中定义了颜色,我也在其他编辑框中看到了框(尽管我根本没有触及它的样式)

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

MainWindow :: MainWindow(QWidget * parent):     的QMainWindow(父),     ui(新的Ui :: MainWindow) {     UI-> setupUi(本);

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,为它设置字体,然后在其上设置HINDI测试。然后隐藏这个LineEdit,因为我不需要它。

由于我上面提到的所有内容现在我的UI允许我将不同的语言文本粘贴到同一UI屏幕上的其他行编辑 - 请参阅附件。

我发现的似乎是愚蠢的解决方案但没有这行编辑会显示印地文文本框。我使用版本控制测试了我的工作问候世界和非工作问候世界程序之间的区别,代码没有区别,所以不知何故QT工具运行时突然忘记了HINDI然后再也不理解它。但是我的工作使UI能够理解HINDI和相关语言。