Невозможно динамически изменить виджет KDE Plasma 5 Расширяемый FullRepresentation Размер компонента за пределами Component.onCompleted - PullRequest
0 голосов
/ 13 октября 2018

Я кодирую виджет, который можно развернуть до его FullRepresentation, щелкнув по нему:

                onClicked: {
                    plasmoid.expanded = !plasmoid.expanded 
                }

У меня есть функция, которая обновляет его содержимое и помещает его в Gridview.Функция обновления сначала вызывается из Component.onCompleted, но затем я вызываю ее каждый раз, когда пользователь обновляет данные.Проблема в том, что данные, которые я передаю в расширяемую FullRepresentation, могут содержать различное количество элементов, которые я помещаю в сетку, и вычисляю их И размеры FullRepresentation на основе этого числа.

Однако я нахожу, что я тольковозможность указать размер представления из блока Component.onCompleted.Когда я вызываю функцию обновления вне ее, она не меняет размер, независимо от того, определен ли размер в свойствах элемента, например:

Item 
{
    id: fullRepresentation
    width: no_items > 2 ? 465 : no_items * 155
    height: Math.ceil(no_items / 3)* 155    
    property int no_items

... и я только пытаюсь изменитьno_items из UpdateFunction, или просто попробуйте запустить два уравнения из него.

Есть ли способ обойти это?Я также попробовал свойства implicitHeight и implicitWidth.Я действительно хотел бы иметь возможность динамически регулировать размер основного расширяемого представления, плохо его жестко кодировать, а затем иметь много незаполненного пространства.

РЕДАКТИРОВАТЬ: Вот запрошенный пример:

Root.qml

import org.kde.plasma.plasmoid 2.0
import QtQuick 2.2

Item
{
    id: root
    width: 185; height: 185
    Plasmoid.compactRepresentation: Compact {}
    Plasmoid.fullRepresentation: Full {}
    Plasmoid.preferredRepresentation: Plasmoid.compactRepresentation
    signal addItems() 
}

Compact.qml

import QtQuick 2.2

Item
{
    Rectangle
    {      
        width: root.width; height: root.height
        MouseArea
        {
            anchors.fill: parent
            acceptedButtons: Qt.LeftButton | Qt.RightButton
            onClicked: if (mouse.button == Qt.RightButton) root.addItems()
                       else plasmoid.expanded = !plasmoid.expanded
        }
    }
}

Full.qml

import QtQuick 2.2

Item 
{
    width: no_items > 2 ? 465 : no_items * 155
    height: Math.ceil(no_items / 3)* 155    
    property int no_items : 0
    function redrawGridView()  
    {        
        readingListModel.clear()       
        var i
        for (i = 0; i < no_items; i++) readingListModel.append({})                
    }     
    function addItems()
    {
        no_items = 6
        width = no_items > 2 ? 465 : no_items * 155
        height = Math.ceil(no_items / 3)* 155    
        redrawGridView()
    }

    ListModel 
    {
        id: readingListModel
    }

    GridView 
    { 
        id: readingGridView
        width: count > 2 ? 465 : count * 155
        height: Math.ceil(count/3) * 155
        cellWidth: 155; cellHeight: 155
        model: readingListModel
        delegate: Rectangle
        {                  
            width: 150; height: 150;
        }
    }

   Component.onCompleted:
    {            
        root.addItems.connect(addItems)    
        no_items = 3  
        redrawGridView()
    }
}

1 Ответ

0 голосов
/ 23 октября 2018

Ну, я не получил ответа, но сам понял.На самом деле, это не представляется возможным при использовании метода plasmoid.expanded с полным представлением и приводит к другим ошибкам, как я уже упоминал в своем комментарии.

Но вы можете динамически изменять размер элемента Window из любого местав вашем коде, так что это работает просто отлично:

в Compact.qml

    Full
    {  
        id: fullRep
    }  
    MouseArea
    {
        anchors.fill: parent
        onClicked: 
        {
            if (!fullRep.visible) fullRep.show()
            else fullRep.close()
        }
    }

начало Full.qml

Window
{
    x: 100;y: 100
    width: 465;height: 195
    color: theme.backgroundColor
    flags: Qt.FramelessWindowHint //You can make it frameless like the expandable  
                                 //representation is when using the previous method
...