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 или более ячеек, и только тогда пропертя получает размер.
              В общем не получается так(

                Комментарии

                Только авторизованные пользователи могут публиковать комментарии.
                Пожалуйста, авторизуйтесь или зарегистрируйтесь
                AD

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

                • Результат:50баллов,
                • Очки рейтинга-4
                m
                • molni99
                • 26 октября 2024 г. 1:37

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

                • Результат:80баллов,
                • Очки рейтинга4
                m
                • molni99
                • 26 октября 2024 г. 1:29

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

                • Результат:20баллов,
                • Очки рейтинга-10
                Последние комментарии
                ИМ
                Игорь Максимов22 ноября 2024 г. 11:51
                Django - Урок 017. Кастомизированная страница авторизации на Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
                Evgenii Legotckoi
                Evgenii Legotckoi31 октября 2024 г. 14:37
                Django - Урок 064. Как написать расширение для Python Markdown Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
                A
                ALO1ZE19 октября 2024 г. 8:19
                Читалка fb3-файлов на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                ИМ
                Игорь Максимов5 октября 2024 г. 7:51
                Django - Урок 064. Как написать расширение для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                d
                dblas55 июля 2024 г. 11:02
                QML - Урок 016. База данных SQLite и работа с ней в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                Сейчас обсуждают на форуме
                Evgenii Legotckoi
                Evgenii Legotckoi24 июня 2024 г. 15:11
                добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
                t
                tonypeachey115 ноября 2024 г. 6:04
                google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
                NSProject
                NSProject4 июня 2022 г. 3:49
                Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…
                9
                9Anonim25 октября 2024 г. 9:10
                Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

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