BlinCT
BlinCT5 февраля 2021 г. 15:31

Применение нужных настроек(цвет, ширина) в графике для определенных обьектов

Всем привет.
Пытаюсь решить такую проблему:
есть булевое значение наличия или отсутствия заголовков в таблице, так же для строк в таблице через 1 строку применяется дизайн.
Я вызываю функцию и передаю туда индекс, там и происходит те или иные указания для цвета и ширины границы.
И ошибку я получаю
ReferenceError: delegateRect is not defined
Вопрос, что я делаю не так?)
Благодарю заранее

import QtQuick 2.12

Item
{
    id: root

    property var  model
    property bool headers : false

    function getSize(column)
    {
        return tableView.model.getSizeLongString(column)
    }

    function foo(indexRow)
    {
        if (headers == true)
        {
            console.log("indexRow", headers)
            if (indexRow % 2 == 0)
            {
                delegateRect.color = "transparent";
                delegateRect.border.width = 0;
            }
            else
            {
                delegateRect.color = "#2C3033";
                delegateRect.border.width = 1;
            }
        }
        else
        {
            console.log("indexRow", headers)
            if (indexRow % 2 != 0)
            {
                delegateRect.color = "transparent";
                delegateRect.border.width = 0;
            }
            else
            {
                delegateRect.color = "#2C3033";
                delegateRect.border.width = 1;
            }
        }
    }

    Row
    {
        id: rowHeader

        anchors.top: parent.top
        anchors.left: parent.left
        anchors.right: parent.right
        height: visible ? 35 : 0
        visible: root.headers
        enabled: !root.headers

        Repeater
        {
            id: headerRepeater

            model: root.model.headerModel

            Rectangle
            {
                id: rectHeader

                width: root.model.getSizeLongString(index)
                border.color: "blue"
                height: 35

                Component.onCompleted:
                {
                    root.model.setHeaderItem(rectHeader);
                }

                Text
                {
                    width: 50

                    height: 35

                    anchors.fill: parent

                    text: root.model.headerData(modelData, Qt.Horizontal, "display")
                }
            }
        }
    }

    ListView
    {
        id: tableView

        anchors.top:  headers ? rowHeader.bottom : root.top
        anchors.left: parent.left
        anchors.right: parent.right
        anchors.bottom: parent.bottom

        flickableDirection: TableView.VerticalFlick

        clip: true
        model: root.model

        delegate:  Rectangle
        {
            id: delegateRect

            color: "transparent"
            implicitWidth: 543
            implicitHeight: 22

            property var indexRow: model.index

            Row
            {
                id: rect
                clip: true

                Repeater
                {
                    id: celsRepeater

                    model: root.model.columnCount()


                    Component.onCompleted:
                    {
                        root.foo(delegateRect.indexRow)
                    }

                    Rectangle
                    {
                        id: rextText

                        border.color: "blue"
                        color: "#2C3033"
                        width: root.model.getSizeLongString(index)
                        height: 15

                        Text
                        {
                            width: 50
                            height: 35

                            anchors.fill: parent
                            font.pixelSize: 12
                            verticalAlignment: Text.AlignTop
                            color: model.index === 0 ? "#B8B8B8" : "#EAEAEA"
                            text: root.model.getData(indexRow, model.index)
                        }
                    }
                }
            }
        }
    }
}

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

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

7
Алексей Внуков
  • 8 февраля 2021 г. 5:01

добрый, а пробывали обращаться через лист tableView.delegateRect.color="transparent";?
когда-то делал цветные строки в таблице на первых контролах, делал так

        TableView
        {
            id: table_view_monitor
            anchors.fill: parent

            clip: true  

            TableViewColumn
            {
                role: "InOutState"
                title: qsTr("Direction")
                width: 125
                delegate: Label
                {
                    text:
                    {
                       var al=styleData.value//monitorModel.get(styleData.row).inoutstate
                       if (al===0) return qsTr('enter')
                       else if(al===1) return qsTr('exit')
                       else return qsTr('undefined')
                    }
                    color: "black"
                    font.family: "Arial"
                    font.pixelSize: 11
                    leftPadding: 5
                }
            }

            TableViewColumn
            {
                role: "norm"
                title: qsTr("NORM")
                visible: false
                width: 200
                delegate: Label
                {
                    text: styleData.value
                    color: "black"
                    font.family: "Arial"
                    font.pixelSize: 11
                    bottomPadding: 2
                    leftPadding: 5
                }
            }
            model: m_model

            headerDelegate: Rectangle {
                height: 25
                width: textItem.implicitWidth

                Label {
                    id: textItem
                    anchors.centerIn: parent
                    text: styleData.value
                    color: "black"
                    font.family: "Arial"
                    font.pixelSize: 12
                }
                Frame {
                    anchors.right: parent.right
                    anchors.top: parent.top
                    anchors.bottom: parent.bottom
                    anchors.bottomMargin: 1
                    anchors.topMargin: 1
                    width: 1
                }
            }

            rowDelegate: Rectangle
            {
                anchors.fill: parent
                color:{
                    var al=m_model.get(styleData.row).norm
                    if(al===0) return "red"
                    else if (styleData.selected) return 'lightblue'
                    else if(styleData.alternate) return Material.background
                    else return "white"
                }

                MouseArea
                {

                    anchors.fill: parent
                    acceptedButtons: Qt.RightButton | Qt.LeftButton
                    onClicked:
                    {
                        table_view_monitor.selection.clear()
                        table_view_monitor.selection.select(styleData.row)
                        table_view_monitor.currentRow=styleData.row
                        table_view_monitor.focus=true

                        switch(mouse.button)
                        {
                        case Qt.RightButton:
                            contextMenu.popup()
                            break
                        default:
                            break
                        }
                    }
                }
                Menu
                {
                    id: contextMenu
                    MenuItem
                    {
                        text: qsTr("Get CardNo")
                        onTriggered:
                        {
                            card_no.text=m_model.get(styleData.row).CardNo
                            table_view_monitor.focus=false
                        }
                    }
                }
            }
        }
    BlinCT
    • 8 февраля 2021 г. 6:51

    Интересно что если я не вызываю функцию а в место нее все if вытаскиваю то это срабатывает. Но через функцию не работает.
    Не пойму почему

      Алексей Внуков
      • 8 февраля 2021 г. 8:23

      где-то явно нарушена область видимости обьекта, возможно delegateRect не доступен за пределами своего елемента, нужно смотреть документацию по-глубже.

        Алексей Внуков
        • 8 февраля 2021 г. 8:23

        где-то явно нарушена область видимости обьекта, возможно delegateRect не доступен за пределами своего елемента, нужно смотреть документацию по-глубже.

          BlinCT
          • 9 февраля 2021 г. 7:26

          На самом деле есть такая мысль, надо бы понять как это протестить чтоыб найти ответ)
          Кстати такой вопрос который касается имено этого кода, на строке 138 там есть ширина для Rectangle и в нем уже будет текст.
          А вот внешнйи делегат у него у Rectangle у меня стоит статический размер ширины.
          Вопрос состоит в том, можно ли получая ширину на 138 формировать ширину делегата для всех созданных в репиторе обьектов?
          Мне надо как то в нормальный вид привезти то что на 110 и 111 строках.

            Алексей Внуков
            • 9 февраля 2021 г. 17:05
            • (ред.)

            если я правильно понял, можно добавить property int rec_width:0 в самом начале делегата, тогда там где нужно указать ширину указываем rec_width, а в Component.onCompleted: добавить rec_width=root.model.getSizeLongString(index), тогда будет перерисовываться по указанному размеру (должно сработать), или отдельно в модели передавать ширину, тогда будет что-то вроде property int rec_width:root.model.getSize(). возможно путанно написал, надеюсь идею поняли

              BlinCT
              • 11 февраля 2021 г. 18:10

              Добрый вечер.
              Спасибо за совет. По сути я идею понял но она получается не рабочей.
              Потому что с начале у делегата имеется пропертя данная, потом ширина implicitWidth: 543 которая и дает ширину данной строки, а уже после репитер создает данные 2 или более ячеек, и только тогда пропертя получает размер.
              В общем не получается так(

                Комментарии

                Только авторизованные пользователи могут публиковать комментарии.
                Пожалуйста, авторизуйтесь или зарегистрируйтесь
                SH
                • Sak Hax
                • 26 апреля 2024 г. 0:00

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

                • Результат:33баллов,
                • Очки рейтинга-10
                г
                • ги
                • 24 апреля 2024 г. 1:51

                C++ - Тест 005. Структуры и Классы

                • Результат:41баллов,
                • Очки рейтинга-8
                l
                • laei
                • 23 апреля 2024 г. 19:19

                C++ - Тест 004. Указатели, Массивы и Циклы

                • Результат:10баллов,
                • Очки рейтинга-10
                Последние комментарии
                k
                kmssr9 февраля 2024 г. 5:43
                Qt Linux - Урок 001. Автозапуск Qt приложения под Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                АК
                Анатолий Кононенко5 февраля 2024 г. 12:50
                Qt WinAPI - Урок 007. Работаем с ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
                EVA
                EVA25 декабря 2023 г. 21:30
                Boost - статическая линковка в CMake проекте под Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
                J
                JonnyJo25 декабря 2023 г. 19:38
                Boost - статическая линковка в CMake проекте под Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
                G
                Gvozdik19 декабря 2023 г. 8:01
                Qt/C++ - Урок 056. Подключение библиотеки Boost в Qt для компиляторов MinGW и MSVC Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
                Сейчас обсуждают на форуме
                G
                Gar22 апреля 2024 г. 15:46
                Clipboard Как скопировать окно целиком в clipb?
                DA
                Dr Gangil Academics20 апреля 2024 г. 17:45
                Unlock Your Aesthetic Potential: Explore MSC in Facial Aesthetics and Cosmetology in India Embark on a transformative journey with an msc in facial aesthetics and cosmetology in india . Delve into the intricate world of beauty and rejuvenation, guided by expert faculty and …
                a
                a_vlasov14 апреля 2024 г. 16:41
                Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Евгений, добрый день! Такой вопрос. Верно ли следующее утверждение: Любое Android-приложение, написанное на Java/Kotlin чисто теоретически (пусть и с большими трудностями) можно написать и на C+…
                Павел Дорофеев
                Павел Дорофеев14 апреля 2024 г. 12:35
                QTableWidget с 2 заголовками Вот тут есть кастомный QTableView с многорядностью проект поддерживается, обращайтесь
                f
                fastrex4 апреля 2024 г. 14:47
                Вернуть старое поведение QComboBox, не менять индекс при resetModel Добрый день! У нас много проектов в которых используется QComboBox, в версии 5.5.1, когда модель испускает сигнал resetModel, currentIndex не менялся. В версии 5.15 при resetModel происходит try…

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