2014-12-18 2 views
2

Как изменить размер строки по умолчанию в QTableView, чтобы он был меньше? Я могу позвонить resizeRowsToContents(), но затем последующие вставки по-прежнему добавляют новые строки в конце, которые являются размером по умолчанию.изменение размера строки по умолчанию в QTableView

Я предполагаю, что это может иметь какое-то отношение к таблицам стилей, но я недостаточно знаком с тем, что влияет на визуальные изменения.

Я использую PySide в Python, но я думаю, что это общий вопрос Qt.


пример вид:

таблицы по умолчанию внешний вид

enter image description here

, что таблица выглядит как после resizeRowsToContents():

enter image description here

теперь, если я добавить новую пустую строку в конце:

enter image description here

Чёрт, он использует высоту строки по умолчанию, со всем, что дополнительное пространство.

+0

'tableView.verticalHeader() .setResizeMode (QHeaderView.ResizeToContents) ', похоже, работает хорошо, но он динамичен и замедляет мое приложение, когда я делаю много обновлений в реальном времени. Я просто хочу получить стандартный размер строки. :-( –

+2

«Стандартная» высота строки - это то, что вы получаете, когда вы не изменяете размер содержимого. Это основано на подсказке размера для строки, которая получена из подсказки размера для делегата элемента (среди прочего). Если вам не нравится эта конкретная высота, просто измените ее на нечто более приемлемое (например, 'table.fontMetrics(). Height() + 6'). – ekhumoro

+0

Как-то я не вижу большой разницы между вторым и третьим изображением. – Trilarion

ответ

6

Qt::SizeHintRole ответственность за ширину и высоту ячейки. Таким образом, вы можете просто:

someModel.setData(someIndex,QSize(width, height), Qt::SizeHintRole); 

Или просто это:

someView.verticalHeader().setDefaultSectionSize(10); 

И я думаю, что setDefaultSectionSize это именно то, что вы ищете. AFAIK нет другого простого способа.

From doc:

defaultSectionSize: INT

Это свойство по умолчанию размер разделов заголовка перед тем изменения размера. Это свойство влияет только на разделы с Интерактивным или Исправлено как их режим изменения размера.

Если вы не знаете, сколько пикселей вам нужно, а затем попытаться получить эту высоту после нанесения resizeRowsToContents() с rowHeight()

Так оно и должно быть что-то вроде:

resizeRowsToContents(); 
someView.verticalHeader().setDefaultSectionSize(someView.rowHeight(0)); 
+0

Хммм ... но я не знаю количества пикселей. Я просто хочу, чтобы QTableView отображал данные без дополнительного места. –

+0

@JasonS После вашего скриншота я вижу, что высота строки такая же, поэтому я отредактировал свой ответ, и если данные не очень сложны, он должен работать. – Chernobyl

Смежные вопросы