我在使用不同的操作系统(尝试过Windows 7和Ubuntu 13.10)时遇到了不同的字体宽度和高度问题。我尝试设置pixelSize和pointSize,两种结果在Arial和Courier字体文本中都有不同的大小(Windows字体通常更大)。
以下是一个例子:
Rectangle {
width: 312
height: 44
Text {
id: text_1
text: qsTr("1234567890123456789012345678901234567890")
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
font.family: "Courier"
font.pointSize: 10
}
Text {
id: text_2
text: qsTr("123456789012345678901234567890")
anchors.top: text_1.bottom
anchors.left: parent.left
anchors.right: parent.right
font.family: "Courier"
font.pointSize: 10
}
Text {
id: text_3
text: qsTr("12345678901234567890123456789012345")
anchors.top: text_2.bottom
anchors.left: parent.left
anchors.right: parent.right
font.family: "Courier"
font.pointSize: 10
}
}
这个矩形的宽度和高度是通过反复试验来定义的,以适应Ubuntu中的3个文本。请参见下面的屏幕截图:
在我的应用程序中,我想要一个文本对象(使用Courier字体)来填充它的父级宽度(文本是固定的)。在另一个矩形中,我想要文本对象(不止一个,像上面的例子一样锚定,使用Arial字体)来填充父级的高度。
目前,我正在寻找一种方法来动态设置父级的宽度和高度,根据固定的文本内容计算,但我不能动摇这种感觉,这是一种更简单的方法。
任何提示都表示赞赏。
答案 0 :(得分:3)
在这种情况下选择一个父高度/宽度是个坏主意 - 正如你所看到的,它不可移植;如果你以后决定更改字体怎么办?你想重新计算一切吗?这是您想要委托给QML的东西。
我建议使用Layouts,如下所示:
import QtQuick.Layouts 1.1 // Necessary to use ColumnLayout
ColumnLayout { // A Single Column
Text {
id: text_1
text: qsTr("1234567890123456789012345678901234567890")
// No need for anchoring ! You may want to use Layout.fillWidth: true in some cases
font.family: "Courier"
font.pointSize: 10
}
Text {
id: text_2
text: qsTr("123456789012345678901234567890")
font.family: "Courier"
font.pointSize: 10
}
Text {
id: text_3
text: qsTr("12345678901234567890123456789012345")
font.family: "Courier"
font.pointSize: 10
}
}