使用Qt进行软件的开发,需要实现多语言

使用Qt进行软件的开发,需要实现多语言,但是存在一个问题是每一种语言的字符长度是不一样的,导致了UI很难去适配每一种语言,比如一些拉丁语系的问题,会比中文或英文长许多,导致UI排版的不确定性,有些显示不全,有没有什么什么合适的方案能够解决这个问题,

希望达到的效果是每次切换一种语言,显示的UI界面能够动态的适应字符的长度,自动的进行调整,使每个界面都能够完整的显示出来;

如果你不设置最大值的话,ui本来的就可以自动调整的啊。不过最好就是按照最长的语言设计ui

1、QTextEdit
QTextEdit的父窗口的构造函数:


    ui->textEdit->resize(24, 42);
    connect(ui->textEdit->document(),SIGNAL(contentsChanged()),this,SLOT(textAreaChanged()));
    ui->textEdit->setLineWrapMode(QTextEdit::NoWrap);

槽函数:


void Widget::textAreaChanged()
{
    QTextDocument *document=qobject_cast<QTextDocument*>(sender());
    document->adjustSize();
    if(document)
    {
        QTextEdit *editor=qobject_cast<QTextEdit*>(document->parent()->parent());
        if(editor)
        {
            int newwidth = document->size().width() + 10;//10
            int newheight = document->size().height() + 20;//20
            if(newwidth != editor->width())
            {
                editor->setFixedWidth(newwidth);
            }
            if(newheight != editor->height())
            {
                editor->setFixedHeight(newheight);
            }
        }
    }
}


2、QLineEdit
这样也许可以实现:
先设定一个最小的宽度,QLineEdit有一个信号是void textChanged ( const QString & text ),就是内容改变的时候触发的,然后写个槽函数,得到text.size(),如果这个size比最小的大了,就重新设定一下lineedit的宽度,宽度值就是这个text的size

3、QLineEdit

connect(this, &MyLineEdit::textEdited, [ = ]()
{
    setFixedSize(sizeHint());
});
 
QSize MyLineEdit::sizeHint() const
{
    return QSize(fontMetrics().horizontalAdvance(text()) + 35, 30);
}

QFontMetrics这个类可以计算给定字体的字符和字符串的大小

建议对每个字符串的长度进行限制,或者采用缩写的方法显示!然后把字符串的全部信息显示在提示框中!谢谢,望采纳!