使用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这个类可以计算给定字体的字符和字符串的大小
建议对每个字符串的长度进行限制,或者采用缩写的方法显示!然后把字符串的全部信息显示在提示框中!谢谢,望采纳!