Сергей Баженов
Сергей Баженов21 ноября 2017 г. 4:04

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

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

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)
            }
        }
    }
Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

6
Evgenii Legotckoi
  • 21 ноября 2017 г. 17:23
  • (ред.)
  • Ответ был помечен как решение.

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

Можно, когда делегат будет создан, просто подключить коннект через дополнительный сигнал.
Будет так выглядеть.
        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)
                }
            }
        }
    Сергей Баженов
    • 22 ноября 2017 г. 4:15

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

      Сергей Баженов
      • 22 ноября 2017 г. 4:34

      пытаюсь проверить 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

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

        Evgenii Legotckoi
        • 22 ноября 2017 г. 5:03

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

          Сергей Баженов
          • 22 ноября 2017 г. 9:12

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

          var b=0

          a==b// true

          a===b//ура

            Evgenii Legotckoi
            • 22 ноября 2017 г. 9:49

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

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

              Комментарии

              Только авторизованные пользователи могут публиковать комментарии.
              Пожалуйста, авторизуйтесь или зарегистрируйтесь
              e
              • ehot
              • 31 марта 2024 г. 21:29

              C++ - Тест 003. Условия и циклы

              • Результат:78баллов,
              • Очки рейтинга2
              B

              C++ - Тест 002. Константы

              • Результат:16баллов,
              • Очки рейтинга-10
              B

              C++ - Тест 001. Первая программа и типы данных

              • Результат:46баллов,
              • Очки рейтинга-6
              Последние комментарии
              k
              kmssr9 февраля 2024 г. 2:43
              Qt Linux - Урок 001. Автозапуск Qt приложения под Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
              АК
              Анатолий Кононенко5 февраля 2024 г. 9:50
              Qt WinAPI - Урок 007. Работаем с ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
              EVA
              EVA25 декабря 2023 г. 18:30
              Boost - статическая линковка в CMake проекте под Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
              J
              JonnyJo25 декабря 2023 г. 16:38
              Boost - статическая линковка в CMake проекте под Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
              G
              Gvozdik19 декабря 2023 г. 5:01
              Qt/C++ - Урок 056. Подключение библиотеки Boost в Qt для компиляторов MinGW и MSVC Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
              Сейчас обсуждают на форуме
              a
              a_vlasov14 апреля 2024 г. 13:41
              Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Евгений, добрый день! Такой вопрос. Верно ли следующее утверждение: Любое Android-приложение, написанное на Java/Kotlin чисто теоретически (пусть и с большими трудностями) можно написать и на C+…
              Павел Дорофеев
              Павел Дорофеев14 апреля 2024 г. 9:35
              QTableWidget с 2 заголовками Вот тут есть кастомный QTableView с многорядностью проект поддерживается, обращайтесь
              f
              fastrex4 апреля 2024 г. 11:47
              Вернуть старое поведение QComboBox, не менять индекс при resetModel Добрый день! У нас много проектов в которых используется QComboBox, в версии 5.5.1, когда модель испускает сигнал resetModel, currentIndex не менялся. В версии 5.15 при resetModel происходит try…
              P
              Pisych27 февраля 2023 г. 12:04
              Как получить в массив значения из связанной модели? Спасибо, разобрался:))
              AC
              Alexandru Codreanu19 января 2024 г. 19:57
              QML Обнулить значения SpinBox Доброго времени суток, не могу разобраться с обнулением значение SpinBox находящего в делегате. import QtQuickimport QtQuick.ControlsWindow { width: 640 height: 480 visible: tr…

              Следите за нами в социальных сетях