问题描述
我正在尝试制作一个非常简单的 KDE-plasma 小部件,其中只显示特定数字。我想让这个显示的数字有一个尽可能大的字体大小,这取决于包含它的父级。 这是它现在的样子:
如您所见,里面的文字周围有很多空间。我真正想要的是类似于 KDE plasma 中的“日期和时间”小部件(我的小部件就在它旁边以进行比较):
在这里,显示的时间周围的空间要小得多,同时还会在面板高度发生变化时自动调整大小。
这是当前代码的样子:
import QtQuick 2.6
import QtQuick.Layouts 1.0
import org.kde.plasma.components 2.0 as plasmaComponents
import org.kde.plasma.plasmoid 2.0
Item {
id: main
anchors.fill: parent
Layout.minimumWidth: units.iconSizes.large
Layout.minimumHeight: units.iconSizes.large
Plasmoid.preferredRepresentation: Plasmoid.fullRepresentation
plasmaComponents.Label {
id: display
anchors {
fill: parent
margins: Math.round(parent.width * 0.1)
}
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignHCenter
text: foobar
font.pixelSize: 1000;
minimumPointSize: theme.smallestFont.pointSize
fontSizeMode: Text.Fit
font.bold: true
}
Timer {
some stuff
}
}
我尝试查看上述日期和时间小部件的代码,并用相同的定位/样式属性写下了完全相同的布局/控件(这就是您在上述代码中看到的内容),但我得到了很多文本周围的空间/或字体大小仍然很小。
解决方法
我试过你的代码,它正确地调整了字体大小。对于文字周围的间距,有两点:
- 通过调整您使用的
margins
值可以轻松控制左右间距。要减少空间,请尝试Math.round(parent.width * 0.05)
。
- 顶部和底部的间距较大,因为父对象的形状是方形,而文本的形状是矩形。为了使文本适合正方形的高度而不超过正方形的宽度,文本不仅需要调整大小,还需要垂直拉伸。但是 QML 没有一种简单的方法可以做到这一点,而且我怀疑这是否真的是您想要的。
编辑:
如果您确实想要字体拉伸,我会为您指出 this 答案。
,多亏@JarMan 的输入,我才意识到我的文本正在以小字体呈现,因为根 (item
) 元素的形状为方形,因此空间不足。
我现在认为要更改 KDE-Plasma 面板内根元素的布局大小,需要弄乱 Layout.preferredWidth
和 Layout.preferredHeight
。
这是我所做的:
item {
.
.
Layout.preferredWidth: 150 * units.devicePixelRatio
Layout.preferredHeight: 50 * units.devicePixelRatio
.
.
}
注意:150 和 50 值不是最终值。它基本上给出了根元素的宽度和高度应该在哪个比例(我想要一个矩形)的想法。随着 Plasma Panel 的大小调整,它也会自动调整内部内容的大小。