на клик, умышленно вызывать один и тот же сигнал дважды - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть пользовательский интерфейс, который выглядит следующим образом с использованием repeater для отображения данных различных пользователей, полученных из pyqtProperty:

enter image description here

переключатель switch переключает видимость содержимого под my data. это будет текст (как показано на рисунке выше) или сетка изображений.

тумблер выключен:

enter image description here

значок + переключает видимость содержимого между текстами и сеткой изображений. то есть, нажав значок +, description 0 и description 1 будут скрыты, и будет показана сетка изображений. значок плюса будет заменен на значок -, как показано ниже:

enter image description here

теперь, щелкнув значок -, сетка изображений будет скрыта и description0 и description1 будут показаны снова. обратное действие на этот раз, как показано ниже:

enter image description here

переключение 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, и вместо этого получилось что-то вроде этого:

enter image description here

произошло ли это потому, что при срабатывании первого сигнала qml уже повторно отображает изменения, а когда срабатывает второй сигнал, «исходная» информация больше не присутствует?

если это так, что нужно сделать для достижения запланированного действия? использование другого signal не кажется решением, поскольку «оригинальная» информация по-прежнему отсутствует. объединение двух в один, а затем запуск signal, который подключается к другому pyqtSlot, чтобы справиться с этим, я не хотел бы использовать. update_store - это динамический метод, который также изменяет другие значения в store.

...