У меня есть пользовательский интерфейс, который выглядит следующим образом с использованием repeater
для отображения данных различных пользователей, полученных из pyqtProperty
:
переключатель switch
переключает видимость содержимого под my data
. это будет текст (как показано на рисунке выше) или сетка изображений.
тумблер выключен:
значок +
переключает видимость содержимого между текстами и сеткой изображений. то есть, нажав значок +
, description 0
и description 1
будут скрыты, и будет показана сетка изображений. значок плюса будет заменен на значок -
, как показано ниже:
теперь, щелкнув значок -
, сетка изображений будет скрыта и description0
и description1
будут показаны снова. обратное действие на этот раз, как показано ниже:
переключение switch
, +
и -
запускает тот же signal
, подключенный к тем же update_store
pyqtSlot
, который принимает значения key
, flag
и bool
для обновить состояние store
пользовательского интерфейса. это обновленное состояние store
затем передается обратно в пользовательский интерфейс через notify
через pyqtSignal
, чтобы отразить соответствующие изменения (поток информации аналогичен потоку redux
).
я хотел бы добиться того, чтобы, когда пользовательский интерфейс находился в состоянии, когда switch
выключен и отображается значок +
(как видно на втором изображении выше), нажатие на значок +
переключит switch
, а также показывает сетку изображений, и пользовательский интерфейс становится похожим на то, что вы видите на третьем изображении.
Я попытался достичь вышеупомянутого, дважды выполнив один и тот же сигнал при нажатии на значок +
следующим образом:
MouseArea {
anchors.fill: parent
onClicked: {
mySignal(modelData.key, 'expand', !modelData.expand)
if (!modelData.active) {
mySignal(modelData.key, 'active', true)
}
}
}
// expand determines if text or grid of images is shown
// active determines if the contents are shown
первый сигнал сработал успешно, но второй сигнал не сработал, и я получил ошибку ReferenceError: modelData is not defined
, и вместо этого получилось что-то вроде этого:
произошло ли это потому, что при срабатывании первого сигнала qml
уже повторно отображает изменения, а когда срабатывает второй сигнал, «исходная» информация больше не присутствует?
если это так, что нужно сделать для достижения запланированного действия? использование другого signal
не кажется решением, поскольку «оригинальная» информация по-прежнему отсутствует. объединение двух в один, а затем запуск signal
, который подключается к другому pyqtSlot
, чтобы справиться с этим, я не хотел бы использовать. update_store
- это динамический метод, который также изменяет другие значения в store
.