我正在尝试为自己编写一个桌面小部件,即一个日历,它可以将我的大学日历整齐地显示为一种时间表。我在 Kubuntu 20.04上,所以我想我必须使用 QML ...日历,但现在我不知道如何实现逻辑。
基本上我想从在线 iCal 中获取数据,对其进行解析并将其显示在我的小部件中(并且大约每小时更新一次)。我想我可以为第一部分编写一个 python 脚本,但我仍然没有丝毫线索如何实现在 QML 小部件中显示日期(因为 QML 可能只应该处理图形,但我该如何实现那么逻辑呢?)。我已经在网上搜索了很长时间,并查看了很多预装的小部件,但这并没有太大帮助。所有这些也只用 QML 编写,据我所知没有 C++ ......那么我该怎么做呢?
编辑:按逻辑我的意思是:我如何表达类似“如果星期一 15:30 有日历条目,在小部件中的适当位置构造一个矩形并给它一个合适的标签”
到目前为止我的代码:
import QtQuick 2.0
import QtQuick.Layouts 1.0
import org.kde.plasma.components 3.0 as PlasmaComponents
RowLayout {
spacing: 0
Layout.preferredWidth: 640 * units.devicePixelRatio
Layout.preferredHeight: 480 * units.devicePixelRatio
Rectangle {
//day header
Rectangle {
PlasmaComponents.Label {
text: "Monday"
width: parent.width
horizontalAlignment: Text.AlignHCenter
height: parent.height
verticalAlignment: Text.AlignVCenter
}
color: "transparent"
border.color: "#000"
border.width: 1
anchors.top: parent.top
anchors.right: parent.right
width: parent.width
height: parent.height / 12
}
//day body
color: "transparent"
border.color: "#000"
border.width: 1
Layout.fillHeight: true
Layout.fillWidth: true
}
Rectangle {
//day header
Rectangle {
PlasmaComponents.Label {
text: "Tuesday"
width: parent.width
horizontalAlignment: Text.AlignHCenter
height: parent.height
verticalAlignment: Text.AlignVCenter
}
color: "transparent"
border.color: "#000"
border.width: 1
anchors.top: parent.top
anchors.right: parent.right
width: parent.width
height: parent.height / 12
}
//day body
color: "transparent"
border.color: "#000"
border.width: 1
Layout.fillHeight: true
Layout.fillWidth: true
}
Rectangle {
//day header
Rectangle {
PlasmaComponents.Label {
text: "Wednesday"
width: parent.width
horizontalAlignment: Text.AlignHCenter
height: parent.height
verticalAlignment: Text.AlignVCenter
}
color: "transparent"
border.color: "#000"
border.width: 1
anchors.top: parent.top
anchors.right: parent.right
width: parent.width
height: parent.height / 12
}
//day body
color: "transparent"
border.color: "#000"
border.width: 1
Layout.fillHeight: true
Layout.fillWidth: true
}
Rectangle {
//day header
Rectangle {
PlasmaComponents.Label {
text: "Thursday"
width: parent.width
horizontalAlignment: Text.AlignHCenter
height: parent.height
verticalAlignment: Text.AlignVCenter
}
color: "transparent"
border.color: "#000"
border.width: 1
anchors.top: parent.top
anchors.right: parent.right
width: parent.width
height: parent.height / 12
}
//day body
color: "transparent"
border.color: "#000"
border.width: 1
Layout.fillHeight: true
Layout.fillWidth: true
}
Rectangle {
//day header
Rectangle {
PlasmaComponents.Label {
text: "Friday"
width: parent.width
horizontalAlignment: Text.AlignHCenter
height: parent.height
verticalAlignment: Text.AlignVCenter
}
color: "transparent"
border.color: "#000"
border.width: 1
anchors.top: parent.top
anchors.right: parent.right
width: parent.width
height: parent.height / 12
}
//day body
color: "transparent"
border.color: "#000"
border.width: 1
Layout.fillHeight: true
Layout.fillWidth: true
}
}