Сергей Баженов
Nov. 21, 2017, 3:04 p.m.

как отключить событие при открытии формы?

как обойти проблему: см. комментарий кода - может кто подскажет.

TableView {
    id: table
    model: tableModel
    anchors.fill: parent
    focus: true

    Component.onCompleted: {
        for (var i = 0; i <= 2; i++) {
            tableModel.append({
                "Tone": i,
                "Lenght": 5,
                "Alt": 0,
                "Chord": i != 0
            });
        }
    }

    TableViewColumn {
        role: "Tone"
        title: "Tone"
        width: 95
        delegate: ComboBox {
            model: ["Pause", "I", "II", "III", "IV", "V", "VI", "VII", "Random", "Chord"]
            anchors.fill: parent
            currentIndex: styleData.value
            onCurrentIndexChanged: {
                //убивает начальные установки, установленные событием Component.onCompleted:
                //при интерактивном выборе работает правильно 
                tableModel.setProperty(styleData.row, styleData.role, currentIndex)
            }
        }
    }
2

Do you like it? Share on social networks!

6
Evgenii Legotckoi
  • Nov. 22, 2017, 4:23 a.m.
  • (edited)
  • The answer was marked as a solution.

Получается, что делегат при создании переопределяет свойства элемента модели.

Можно, когда делегат будет создан, просто подключить коннект через дополнительный сигнал.
Будет так выглядеть.
        TableViewColumn {
            role: "Tone"
            title: "Tone"
            width: 95
            delegate: ComboBox {
                id: comboBox
                model: ["Pause", "I", "II", "III", "IV", "V", "VI", "VII", "Random", "Chord"]
                anchors.fill: parent
                currentIndex: styleData.value

                signal indexChanged (var index)

                onCurrentIndexChanged:  {
                    indexChanged(currentIndex)
                }

                Component.onCompleted: {
                    comboBox.indexChanged.connect(changeIndex)
                }

                function changeIndex(currentIndex)
                {
                    tableModel.setProperty(styleData.row, styleData.role, currentIndex)
                }
            }
        }
    Сергей Баженов
    • Nov. 22, 2017, 3:15 p.m.

    Работает, спасибо!

      Сергей Баженов
      • Nov. 22, 2017, 3:34 p.m.

      пытаюсь проверить styleData.value на наличие значения...
      вот пример до и после получения значения

      Debug: row:1, styleData.value: , length: 0, typeof: string, (!value): true
      Debug: row:1, styleData.value: 1, length: 1, typeof: number, (!value): false

      length: (''+styleData.value).length работает... 0 если не заполнено
      typeof:работает но непонятно, откуда взялось эта string
      !value: не работает когда индекс 0

      если есть варианты - поделитесь опытом

        Приведите код, пожалуйста, как Вы пытаетесь проверить значение в styleData.value и куда именно хотите его применить.

          я уже нашел ответ.  когда сравниваю ноль и пустая строка идет преобразование
          var a=''

          var b=0

          a==b// true

          a===b//ура

            Да. это особенность поведения JavaScript.

            QML является JavaScript совместимым языком, поэтому и получил от него некоторые особенности реализации.
            Например, сравнение === отличается от == тем, что сравниваются не только значения переменных, но их типы данных.
            А в случае с JavaScript пустая строка и целочисленный 0 будут равны, если не сравнивать типы переменных.

              Comments

              Only authorized users can post comments.
              Please, Log in or Sign up
              • Last comments
              • AK
                April 1, 2025, 11:41 a.m.
                Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
              • Evgenii Legotckoi
                March 9, 2025, 9:02 p.m.
                К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
              • VP
                March 9, 2025, 4:14 p.m.
                Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
              • ИМ
                Nov. 22, 2024, 9:51 p.m.
                Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
              • Evgenii Legotckoi
                Oct. 31, 2024, 11:37 p.m.
                Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup