QML Calendar - jak ustawic przezroczyste tlo



  • Czesc

    Jak mozna ustawic przezroczyste tlo dla obiektu Calendar? Chce miec przeroczyste tlo, a tekst i ewentualne obramowanie jakies polprzezroczyste. Obiekt Calendar bedzie umieszczony na innym obiekcie ktory ma ustawiony obrazek jako tlo i chce zeby ten obrazek byl widoczny pod kalendarzem.
    Mecze sie juz z tym dosc dlugo i nie mam pojecia co zrobic. Udalo mi sie po wielkich bolach ustawic kolor tla, alee przezroczystosci nie jestem w stanie ustawic. Zawsze sie ustawia biale tlo.

    Ponizej moj obiekt Calendar. Jesli mozecie, to zweryfikujcie takze reszte, bo QML u mnie bardzo kuleje.

    import QtQuick 2.0
    import QtQuick.Controls 1.4
    import QtQuick.Controls.Styles 1.4
    
    Rectangle
    {
    
    //    color: "red"
    //    color: "transparent"
    //    border.color: "black"
        x: mainwindow.width*0.4
        y: mainwindow.height*0.4
        width: mainwindow.width*0.2
        height: width
    
        visible: true
    
        Calendar {
            id: calendarwidget
            objectName: "calendarwidget"
            width: parent.width
            height: parent.height
    
            style: CalendarStyle
            {
                dayDelegate: Rectangle
                {
                    color: styleData.selected ? "#111" : (styleData.visibleMonth && styleData.valid ? "#444" : "#666");
                }
            }
            activeFocusOnTab: true
            dayOfWeekFormat: 2
            antialiasing: true
            visible: true
    //        opacity: 1
            weekNumbersVisible: true
            property var date: new Date()
            visibleMonth: date.getMonth()
    
            Timer
            {
                id: calendarwidget_date_timer
                interval: 1000
                running: true
                repeat: true
    
                onTriggered:
                {
                    var date = new Date()
                    calendarwidget_date_timer: date.getDate()
                }
            }
        }
    }
    
    

  • Moderators

    Zgodznie z dokumentacją: https://doc.qt.io/qt-5/qml-qtquick-controls-styles-calendarstyle.html musisz ustawić w CalendarStyle wszystkie elementy:

    • background
    • navigationBar
    • dayOfWeekDelegate
    • weekNumberDelegate
    • dayDelegate

    I zrobić je na bazie Item (bo Item jest zawsze przezroczysty), albo Rectangle z color: "transparent".

    A root object - albo odkomentuj kolor przerzroczysty, albo zmień na Item i będzie dobrze.

    Co do review:

    x: mainwindow.width*0.4
    y: mainwindow.height*0.4
    width: mainwindow.width*0.2
    height: width
    

    Komponent nie powinien wiedzieć za wiele o swoim parencie. Lepiej to ustawić w pliku który danego komponentu używa, a nie tu.

    Ponadto, powinieneś używać anchors lub layoutów. Sztywne ustawianie x, y to najgorsza opcja z możliwych.


Log in to reply