Russian Qt Forum
Ноябрь 02, 2024, 01:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО]вопрос по TableViewColumn  (Прочитано 4641 раз)
Larry
Гость
« : Декабрь 21, 2015, 22:47 »

Доброго времени суток.
Возник вопрос...н-р, есть такой вот код:
Код:
Item
{
    property variant headers: []
    property int    columns: 0

    TableView
    {
        id: table
        anchors.fill: parent

        model: tableModel
    }

    ListModel
    {
        id: tableModel

        ListElement { title: "header" }
    }
}

Как мне создать TableViewColumn динамически без С++...чисто на Qml? Т.е. н-р в событии Component.onCompleted в цикле создать колонки с именем из headers, что-то типа такого:
Код:
Component.onCompleted
{
       for(var i=0; i < columns; i++)
       {
               создаем новую колонку: headers[i]
               table.addColumn(новая колонка)
       }
}

Спасибо...
« Последнее редактирование: Декабрь 23, 2015, 12:16 от Larry » Записан
Larry
Гость
« Ответ #1 : Декабрь 22, 2015, 13:43 »

Добрый день.
Предыдущую проблему решил таким образом:

main.qml:
Код:
import QtQuick 2.5
import QtQuick.Controls 1.4

ApplicationWindow
{
    visible: true
    width: 640
    height: 480
    title: qsTr("Table Item")

    View
    {
        id: view
        anchors.centerIn: parent

        headers: ["List Avto", "State", "Satellite"]
    }
}

View.qml:
Код:
import QtQuick 2.5
import QtQuick.Controls 1.4

Item
{
    property variant headers: []

    TableView
    {
        id: _view
        anchors.centerIn: parent

        model: _modelView

        resources:
        {
            var temp = []

            for(var i = 0; i < headers.length; i++)
            {
                var header = headers[i]
                var newColumn = _item.createObject(_view, {"title": header})
                temp.push(newColumn)
            }

            return temp
        }

        headerDelegate: _headerDelegate
    }

    Component
    {
        id: _headerDelegate

        Text
        {
            text: styleData.value
            color: (styleData.pressed)?"red":"black"
        }
    }

    ListModel
    {
        id: _modelView
    }

    Component
    {
        id: _item
        TableViewColumn { width: 100 }
    }
}

После этого появились вопросы: как добраться до TableViewColumn и установить ему выравнивание по центру? Как изменить размер column по содержимому?
Записан
Larry
Гость
« Ответ #2 : Декабрь 22, 2015, 17:46 »

Переделал view, теперь почти все работает...кроме центрирования headers
вот view:
Код:
import QtQuick 2.5
import QtQuick.Controls 1.4

Item
{
    property variant headers: []

    TableView
    {
        id: _table
        anchors.fill: parent
        model: _modelTable

        Component.onCompleted:
        {
            for(var index = 0; index < headers.length; index++)
            {
                var component = Qt.createComponent("item")
                if(component.status == Component.Ready)
                {
                    var column = component.createObject(_table)

                    if(column != null)
                    {
                        _table.addColumn(column)
                        var col = _table.getColumn(index)

                        col.title = headers[index]
                        col.delegate = _textDelegate

                        col.resizeToContents()
                    }
                    else
                        console.log("column is null")
                }
                else
                    console.log(component.errorString())
            }

            _table.resizeColumnsToContents()
        }

        headerDelegate: _headerDelegate
        rowDelegate: _rowDelegate
    }

    ListModel
    {
        id: _modelTable

        ListElement { name: "avto1" }
        ListElement { name: "avto2" }
        ListElement { name: "avto3" }
        ListElement { name: "avto4" }
        ListElement { name: "avto5" }
    }

    Component
    {
        id: _headerDelegate

        Rectangle
        {
            width: _textHeader.text.length*1.2
            height: _textHeader.font.pixelSize*1.2
            color: "skyblue"

            border
            {
                width: 1
                color: (styleData.pressed)?"red":"black"
            }

            Text
            {
                id: _textHeader

                anchors.horizontalCenter: parent.horizontalCenter

                font.bold: true

                color: (styleData.pressed)?"red":"black"
                text: styleData.value

                Component.onCompleted:
                {
                    console.log(_textHeader.text.length)
                }
            }
        }
    }

    Component
    {
        id: _textDelegate

        Rectangle
        {

            color: (styleData.selected)?"red":"white"
            border
            {
                width: 1
                color: (styleData.selected)?"skyblue":"black"
            }

            Text
            {
                anchors.centerIn: parent
                color: (styleData.selected)?"skyblue":"black"
                text: styleData.value
            }
        }
    }

    Component
    {
        id: _rowDelegate

        Item
        {
            height: 24
        }
    }
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.265 секунд. Запросов: 21.