crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> QTreeView, Drag and Drop, скрытые столбцы не передаются почему-то
poluna
  опции профиля:
сообщение 15.1.2016, 14:11
Сообщение #1


Студент
*

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

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




Репутация:   0  


Всем привет.
В моем классе модели (производной от QStandardItemModel), есть такой код:
def dropMimeData(self, data, action, row, column, parent):
        if action == QtCore.Qt.IgnoreAction:
            return True
        if not data.hasFormat("application/draganddropdata.text.list"):
            return False

        encodedData = data.data("application/draganddropdata.text.list")
        stream = QtCore.QDataStream(encodedData, QtCore.QIODevice.ReadOnly)

        items = []
        while not stream.atEnd():
            text = stream.readQVariant().toString().toUtf8()
            items.append(str(text))
        if len(items) > 0:
            self.emit(QtCore.SIGNAL('treeDropData'), items)

        return True
Данный код работает.

Проблема в том, что если я скрываю столбцы у QTreeView, то в items данные из скрытых столбцов не попадают, а хотелось бы!
Как получать все столбцы, даже скрытые в dropMimeData из data?

Столбцы скрываю так: tree.hideColumn(n)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 15.1.2016, 14:28
Сообщение #2


Старейший участник
****

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

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




Репутация:   8  


Тут надо смотреть код, который формирует data.
Это обычно метод mimeData у модели.
Поскольку этот метод не(должен)быть связан с видом, то и скрытие столбцов в QTreeView никак не может на него повлиять.
Код mimeData в студию! :lol:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
poluna
  опции профиля:
сообщение 15.1.2016, 16:55
Сообщение #3


Студент
*

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

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




Репутация:   0  


Что-то не подумав кинула код! :D
def mimeData(self, indexes):
        mimeData=QtCore.QMimeData()
        encodedData=QtCore.QByteArray()

        stream=QtCore.QDataStream(encodedData, QtCore.QIODevice.WriteOnly)
        for index in indexes:
            if index.isValid():
                text=self.data(index, QtCore.Qt.DisplayRole)
                stream.writeQVariant(text)
        mimeData.setData("application/draganddropdata.text.list", encodedData)
        return mimeData


Так вот: количество indexes, которые приходят в mimeData ровно столько, сколько видимых столбцов. :(

Сообщение отредактировал poluna - 15.1.2016, 16:51
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 15.1.2016, 17:51
Сообщение #4


Старейший участник
****

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

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




Репутация:   8  


Что то вроде:
rows = set()
for index in indexes:
  if index.isValid():
    rows.add(index.row)

for row in rows:
  // write row to stream

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




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