crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> [РЕШЕНО]Делегат headerDelegate для TableView
larry
  опции профиля:
сообщение 22.12.2015, 13:52
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 55
Регистрация: 16.12.2010
Пользователь №: 2274

Спасибо сказали: 8 раз(а)




Репутация:   0  


Добрый день.
Есть такой код:
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

        width: 300
        height: 200

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


View.qml:
Раскрывающийся текст
import QtQuick 2.5
import QtQuick.Controls 1.4

Item
{
    property variant headers: []

    TableView
    {
        id: _view
        anchors.fill: 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 }
    }
}


Трудности возникли с делегатом хидеров...не могу понять как изменить их ширину по содержимому...и вообще как добраться до свойств колонки? Подскажите пожалуйста...

Сообщение отредактировал larry - 23.12.2015, 12:15
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 22.12.2015, 15:08
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


посмотри в доках
QTableView::horizontalHeader() 

QTableView::resizeColumnToContents

QHeaderView::resizeSection


можно ещё использовать флаг
QHeaderView::setSectionResizeMode(HeaderView::ResizeToContents)

но не рекомендую для длинных таблиц - будет тормозить
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
larry
  опции профиля:
сообщение 22.12.2015, 15:28
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 55
Регистрация: 16.12.2010
Пользователь №: 2274

Спасибо сказали: 8 раз(а)




Репутация:   0  


Спасибо, но мне на Qml нужно...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 22.12.2015, 16:38
Сообщение #4


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


QML TableView.resizeColumnsToContents, сделал по аналогии выше для positionViewAtRow:
Component.onCompleted: table.resizeColumnsToContents()
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
larry
  опции профиля:
сообщение 22.12.2015, 17:41
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 55
Регистрация: 16.12.2010
Пользователь №: 2274

Спасибо сказали: 8 раз(а)




Репутация:   0  


Спасибо большое...Переделал view, но единственное пока не могу обновить header, чтобы надпись была по центру. После запуска, если колонку раздвинуть, то надпись центрируется и все нормально.
На изображении результат после запуска:
Прикрепленное изображение


А на этом результат после растягивания хидеров:
Прикрепленное изображение


Вот 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 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.11.2024, 8:07