crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> ширина не основных колонок QTablWidget
tradmir@mail.ru
  опции профиля:
сообщение 24.2.2018, 17:35
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 14
Регистрация: 30.12.2013
Пользователь №: 4019

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




Репутация:   0  


В QtableWidget вроде можно получить размеры всех ячеек таблицы.
Однако вызывает затруднение определение ширины самой левой колонки, где обычно "вертикальные" заголовки.
Вроде можно определить по логическому индексу заголовка.
Также не могу определить высоту горизонтального заголовка, тоже хотелось бы знать, размеры левой верхней клетки или ее логический индекс.
В некоторых случаях колонки может не быть, например, headerType = "columns", или нет горизонтальных заголовков headerType = "rows"

Когда речь идет о внутренних клетках - проблем нет.
Непонятно как быть с столбцом вертикальных заголовков и со строкой горизонтальных.
Левый верхний угол вообще живет своей жизнью.

С уважением,
Радмир
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 25.2.2018, 10:50
Сообщение #2


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

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

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




Репутация:   34  


QHeaderView *QTableView::horizontalHeader() const
QHeaderView *QTableView::verticalHeader() const

?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
tradmir@mail.ru
  опции профиля:
сообщение 25.2.2018, 15:58
Сообщение #3


Студент
*

Группа: Новичок
Сообщений: 14
Регистрация: 30.12.2013
Пользователь №: 4019

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




Репутация:   0  


Цитата(Алексей1153 @ 25.2.2018, 10:50) *
QHeaderView *QTableView::horizontalHeader() const
QHeaderView *QTableView::verticalHeader() const

?

Я попробовал :
QHeaderView * hv = ui->tableWidget->horizontalHeader();
qDebug() << hv->length();
QHeaderView * vv = ui->tableWidget->verticalHeader();
qDebug() << vv->length();

Эта дает возможность определить размеры основной таблицы: Например, ваша таблица имеет вид:
--------------------------------------
|         |   col 1   |  col 2  | col 3  |
--------------------------------------
| row 1| value 1|value2|value3 |
--------------------------------------
| row 2| value 4|value5|value6|
--------------------------------------

HeaderView дает информацию о врутренних клетках таблицы: (row 1,col 1) - (row 2,col 3)

Нужна информация по левому боковому столбцу и по верхнему горизонтальному ряду

Я еще не докопался.

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 26.2.2018, 7:36
Сообщение #4


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

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

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




Репутация:   34  


tradmir@mail.ru,
я думал, тебе нужны
vv->width()
и
hv->height()

а для определения размеров верхнего левого квадратика также пригодится размер всего виджета таблицы ui->tableWidget->viewport()

QWidget *QAbstractScrollArea::viewport() const

Или я что-то не понимаю в ТЗ :)

Сообщение отредактировал Алексей1153 - 26.2.2018, 7:36
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
tradmir@mail.ru
  опции профиля:
сообщение 26.2.2018, 11:37
Сообщение #5


Студент
*

Группа: Новичок
Сообщений: 14
Регистрация: 30.12.2013
Пользователь №: 4019

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




Репутация:   0  


Цитата(Алексей1153 @ 26.2.2018, 8:36) *
tradmir@mail.ru,
я думал, тебе нужны
vv->width()
и
hv->height()

а для определения размеров верхнего левого квадратика также пригодится размер всего виджета таблицы ui->tableWidget->viewport()

QWidget *QAbstractScrollArea::viewport() const

Или я что-то не понимаю в ТЗ :)

ui->tableWidget->viewport() даст ссылку на виджет с rect с левым, верхним углом 0,0
координаты самого tablewidget будут, например: 1,100.
И как быть дальше, верхний левый прямоугольник автоматом изменит размеры, в соответствии с размером вертикальных заголовков, колонки съедут вправо, но ширина и/высоты клеток левого столбца останутся неизвестными!?

Так-что пока непонятки.
Радмир
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 28.2.2018, 8:40
Сообщение #6


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

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

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




Репутация:   34  


tradmir@mail.ru, я, наверное, не понимаю, про какой левый столбец речь. Есть клетки таблицы, есть левый хидер, есть верхний хидер. Всё это лежит на виджете viewport(). Все размеры можно найти, исходя из этих данных
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
tradmir@mail.ru
  опции профиля:
сообщение 9.3.2018, 14:25
Сообщение #7


Студент
*

Группа: Новичок
Сообщений: 14
Регистрация: 30.12.2013
Пользователь №: 4019

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




Репутация:   0  


Цитата(Алексей1153 @ 28.2.2018, 8:40) *
tradmir@mail.ru, я, наверное, не понимаю, про какой левый столбец речь. Есть клетки таблицы, есть левый хидер, есть верхний хидер. Всё это лежит на виджете viewport(). Все размеры можно найти, исходя из этих данных


Ширину и высоту i - того столбца таблицы можно получить по вызову функции:
ui->tableWidget->columnWidth(i);
ui->tableWidget->rowHeight(i);

Это точное значение.
Для определения ширины вертикального заголовка /высоты горизонтального нужно использовать функцию
QSize hint = ui->tableWidget->verticalHeader()->sizeHint(); /QSize hint = ui->tableWidget->horizontalHeader()->sizeHint();
и выбрать максимальное значение ширины(высоты) по всем вертикальным (горизонтальным) заголовкам.
Эта функция определяет расчетный размер обращаясь к protected функции sectionSizeFromContents.
Максимальное значение + несколько пикселов для небольших полей и определит ширину/высоту левой верхней ячейки при наличии заголовков.

Это решение меня устраивает.
Вопрос закрыт.
С уважением,
Радмир

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

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


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




RSS Текстовая версия Сейчас: 19.7.2018, 3:04