Qml 单击按钮更改日历样式
单击Qml 单击按钮更改日历样式,qml,qt5,qtquick2,qtquickcontrols,Qml,Qt5,Qtquick2,Qtquickcontrols,单击按钮时,我需要更改日历样式。目前,在下面的代码中,样式更改仅在第一次创建对象时有效,但只要单击按钮,我就需要手动更改样式 以下是QML代码: import QtQuick 2.0 import QtQuick 2.2 import QtQuick.Controls 1.2 import QtQuick.Controls.Private 1.0 import QtQuick.Controls.Styles 1.1 ApplicationWindow { visible: true
按钮时,我需要更改日历
样式
。目前,在下面的代码中,样式
更改仅在第一次创建对象时有效,但只要单击按钮
,我就需要手动更改样式
以下是QML代码:
import QtQuick 2.0
import QtQuick 2.2
import QtQuick.Controls 1.2
import QtQuick.Controls.Private 1.0
import QtQuick.Controls.Styles 1.1
ApplicationWindow {
visible: true
width: 640
height: 400
minimumWidth: 400
minimumHeight: 300
color: "#f4f4f4"
id: root
Calendar {
id: cal_panel
anchors.topMargin: 10
anchors.horizontalCenter: parent.horizontalCenter;
frameVisible:false
style: CalendarStyle {
gridVisible: false
dayDelegate: Rectangle {
color: styleData.selected ? "#FF2E7BD2" : (styleData.visibleMonth && styleData.valid ? "#191919" : "#191919");
Text {
id:day_txt
text: styleData.date.getDate()
font.bold: true
anchors.centerIn: parent
color: {
var color = "#dddddd";
if (styleData.valid) {
color = styleData.visibleMonth ? "#bbb" : "#444";
var sel = root.getHiglightDates();
for(var i=0;i<sel.length;i++){
if(sel[i]===Qt.formatDateTime(styleData.date,"dd:MM:yyyy"))
color="red"
}
if (styleData.selected) {
color = "black";
}
}
color;
}
}
}
}
}
Button{
anchors.top:cal_panel.bottom
anchors.topMargin: 10
anchors.horizontalCenter: parent.horizontalCenter
text:"Higlight"
onClicked: {
console.log("Higlight here....")
}
}
function getHighlightDates(){
var sel = ["10:11:2015","12:11:2015","11:11:2015","08:11:2015","09:11:2015"];
return sel;
}
}
导入QtQuick 2.0
导入QtQuick 2.2
导入QtQuick.Controls 1.2
导入QtQuick.Controls.Private 1.0
导入QtQuick.Controls.Styles 1.1
应用程序窗口{
可见:正确
宽度:640
身高:400
最小宽度:400
最低高度:300
颜色:“F4”
id:根
历法{
id:cal_面板
上边距:10
anchors.horizontalCenter:parent.horizontalCenter;
frameVisible:false
样式:日历样式{
gridVisible:错误
dayDelegate:矩形{
颜色:styleData.selected?”#FF2E7BD2::(styleData.visibleMonth&&styleData.valid?”#191919:“#191919”);
正文{
id:day_txt
text:styleData.date.getDate()
font.bold:正确
anchors.centerIn:父对象
颜色:{
var color=“#dddddd”;
if(styleData.valid){
color=styleData.visibleMonth?#bbb:“#444”;
var sel=root.getHiglightDates();
对于@skypjack已经建议的(var i=0;i,您只需单击即可指定一种新样式。style
属性是一个组件
,因此这样做没有问题:
组件{
id:style1
日历样式{
背景:矩形{颜色:“浅黄色”}
}
}
组成部分{
id:style2
日历样式{
背景:矩形{颜色:“橙色”}
}
}
历法{
id:日历
锚定。填充:父级
样式:样式1
再次点击:{
calendar.style=style2;
}
}
正如@skypjack已经建议的那样,您只需单击即可指定新样式。样式
属性是一个组件
,因此这样做没有问题:
组件{
id:style1
日历样式{
背景:矩形{颜色:“浅黄色”}
}
}
组成部分{
id:style2
日历样式{
背景:矩形{颜色:“橙色”}
}
}
历法{
id:日历
锚定。填充:父级
样式:样式1
再次点击:{
calendar.style=style2;
}
}
根据问题和@folibis答案中的评论,问题似乎只是围绕着如何在用户通过单击按钮更新列表后,让日历样式反映所选日期的更新列表(来自getHiglightDates()
)
只需添加一个新属性selectedDates
来存储所选日期(以前保存在getHighlightDates()
中)如何与下面的代码类似。通过使用属性绑定,只要selectedDates
发生更改,所选日期的外观将自动更新。在下面的代码中,“day_txt”文本的颜色将在selectedData
更新时更新(当selectedDates
更新时,该属性也随之更新)
根据问题和@folibis答案中的评论,问题似乎只是围绕着如何让日历样式反映用户通过单击按钮更新列表后所选日期的更新列表(从getHiglightDates()
)
只需添加一个新属性selectedDates
来存储所选日期(以前保存在getHighlightDates()
中)如何与下面的代码类似。通过使用属性绑定,只要selectedDates
发生更改,所选日期的外观将自动更新。在下面的代码中,“day_txt”文本的颜色将在selectedData
更新时更新(当selectedDates
更新时,该属性也随之更新)
作为一个简单的解决方案,您可以在单击事件上重新指定样式,强制对日历
项进行后台刷新
要做到这一点,您可以使用
cal_panel.style=cal_panel.style
请注意,此解决方案并非完全对性能友好。:-作为一个简单的解决方案,您可以在单击事件时重新指定样式,强制对日历项目进行后台刷新
要做到这一点,您可以使用
cal_panel.style=cal_panel.style
请注意,此解决方案并非完全对性能友好。:-是的,我知道此方法,但在我的情况下,每次单击按钮时,我都必须突出显示由getHiglightDates()返回的不同日期
函数。因此,我的问题是如何根据getHiglightDates()
@folibis返回的日期列表更改dayDelegate
的文本颜色。问题不清楚,我误解了,您的回答确实是错误的,或者更好,它没有回答正确的问题。:-)是的,我知道这种方法,但在我的情况下,每次单击按钮时,我都必须突出显示由getHiglightDates()
函数返回的不同日期。因此,我的问题是如何根据getHiglightDates()返回的日期列表更改daydegate
的文本颜色
@folibis问题不清楚,我误解了,你的回答确实是错误的,或者更好,它没有回答正确的问题。:-)