Найти - Пользователи
Полная версия: PyQt 4 | QTableView + фильтры
Начало » GUI » PyQt 4 | QTableView + фильтры
1 2
Kyrym
А как вообще вытащить данные из ячеек таблицы?

Пытаюсь получить список всех строк выбранного столбца. Проблема в том, что данные надо брать из сортированной таблицы, которая с первоначальным “массивом данных” не совпадает.
PEHDOM
Kyrym
А как вообще вытащить данные из ячеек таблицы?
данные нужно вытаскивать из модели
 model = self.table.model() # модель QTableView-а
index = model.index(1,1)    
print(model.data(index))  # вывести данные из ячейки в второй( если считать с единицы) строке, второго столбца
Узнать к-во строк в таблице model.rowCount(), к-во столбцов model.columntCount()
Kyrym
А у модели и представления (самой таблицы) индексы данных будут совпадать? Изменяя сортировку представления, индексы модели разве меняются?
—————–
И ещё вопрос. Допустим у меня в таблице столько строк, что в окне не помещаются, приходится пользоваться скроллом. Через функцию поиска я нашёл индексы нужной мне строки, например row(0,100). Что нужно сделать, чтобы таблица перевела вид на эту строку? Вопрос для QTableView и QTableWidget.
PEHDOM
Kyrym
А у модели и представления (самой таблицы) индексы данных будут совпадать? Изменяя сортировку представления, индексы модели разве меняются?
не совсем понял суть вопроса, какие именно индексы? представление только отбражает модель. Почему у них не должны совпадать индексы?
Kyrym
Что нужно сделать, чтобы таблица перевела вид на эту строку? Вопрос для QTableView и QTableWidget.
Если почитать документацию, например тут http://doc.crossplatform.ru/qt/4.8.x/html-qt/qtableview-members.html то можно узнать что у QTableView ( и у соответвенно у QTableWidget как наследника) есть методы scroll( int, int ), scrollContentsBy( int, int ), scrollDirtyRegion( int, int ), scrollTo( const QModelIndex &, ScrollHint ), scrollToBottom (), scrollToTop (). И в частности scrollTo(index) как раз скролит таблицу пока ячейка c указанным индексом не станет видимой.
Как вы вообще что-то делаете не читая документацию?
Kyrym
PEHDOM
не совсем понял суть вопроса, какие именно индексы?
С этим я уже разобрался, работает как надо.
PEHDOM
Если почитать документацию
Не обращал внимания, что есть столь полные списки методов. Буду изучать.
Kyrym
В общем scrollTo.
QAbstractItemView::scrollTo ( const QModelIndex & index, ScrollHint hint = EnsureVisible )

Для таблицы self.table = QTableWidget() пытаюсь написать что-то типа (переход на индекс 12):
 def on_sc(self):
    self.table.scrollTo(12, hint=QAbstractItemView.EnsureVisible)
Или так:
 def on_sc(self):
        self.table.scrollTo(self.table.item(12, 1), hint=QAbstractItemView.EnsureVisible)
Но это всё не работает.
PEHDOM
Kyrym
Но это всё не работает.
ну так вам нужно туды передать инстанс класса QModelIndex, а не пару цифирь.
типа model.index(12,1)
hint опционально, можно не передвать
Kyrym
PEHDOM
типа model.index(12,1)
Так если у меня QTableWidget(), то модели-то нет. А конструкция self.table.item(12, 1) не пашет.
PEHDOM
Kyrym
Так если у меня QTableWidget(), то модели-то нет
с чего вы взяли?
http://doc.crossplatform.ru/qt/4.7.x/qtablewidget-members.html
метод model() возвращает текущую модель.
Kyrym
Вот так сработало, да:
 self.table.scrollTo(self.table.model().index(12,1), 3)
Тройка в конце - это hint.
А вообще QModelIndex для QTableWidget() решается через indexFromItem, на сколько я понял.
Из справки:
QModelIndex QTableWidget::indexFromItem ( QTableWidgetItem * item ) const
Возвращает QModelIndex, связанный с данным элементом.
Т.е. типа:
 self.table.scrollTo(self.table.indexFromItem(const QStandardItem * item), 3)
Рабочий итог:
 self.table.scrollTo(self.table.indexFromItem(self.table.item(12,1)), 3)
Хотя первый вариант короче.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB