qml - 手动更新/重新绘制项目

标签 qml qt5 qtquick2 qtquickcontrols

我的问题与日历有关,但可以应用于每个QML视觉Item。有没有办法手动重新绘制Item

就我而言,我有一个带有自定义内容的日历(单元格 26 中的橙色小数字):

enter image description here

为此,我使用样式:

import QtQuick 2.5
import QtQuick.Window 2.2
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2

Window {
    width: 300
    height: 300
    id: window
    Calendar {
        id: calendar
        anchors.fill: parent
        property var dataArr: {26: 7}
        style: CalendarStyle {
            dayDelegate: Rectangle {
                Label {
                    text: styleData.date.getDate()
                    anchors.centerIn: parent
                }
                Label {
                    font.pixelSize: 8
                    anchors.right: parent.right
                    anchors.bottom: parent.bottom
                    width: 12
                    height: 10
                    horizontalAlignment: Text.AlignHCenter
                    text: calendar.dataArr[styleData.date.getDate()] ? calendar.dataArr[styleData.date.getDate()] : ""
                    color: "orange"
                }
            }
        }
        Component.onCompleted: {
            calendar.dataArr[26] = 8; //that doesn't work
        }
    }
}

这适用于静态数组,但如果我更改数据数组中的值,它不会更新单元格。如何强制日历更新?

最佳答案

根据 this通过这种方式,var 不会触发绑定(bind)的更新。他们在示例之后提供了解决方案。在这里应用它:

property var dataArr: new Object( {26: 7} )
...
Component.onCompleted: {
   dataArr = new Object( {26: 8} )
}

关于qml - 手动更新/重新绘制项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33337942/

相关文章:

qt - 将按钮与其上方的文本框对齐并调整其大小

python - PyQt 从不同目录导入 QML 主题

android - 为什么我的 QGestureRecognizer 收不到触摸事件?

c++ - QtQuick 2.1 从 TextInput 获取文本

android - QML WebView 相机权限

c++ - 一个 webview 如何填满整个页面?

qt - QSyntaxHighlighter-文本选择覆盖样式

qt - 如何在 QML 中查询键盘修饰符?

qt - QML 动画 - 移动应用程序窗口

c++ - Qml:从文件加载组件时将参数作为 URL 的一部分传递