Я кодирую виджет, который можно развернуть до его 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()
}
}