Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: fulkabaster от Февраль 07, 2009, 17:52



Название: Повернуть текст на 90 град. в заголовках столбцов
Отправлено: fulkabaster от Февраль 07, 2009, 17:52
Здравствуйте.

Работаю с QTableWidget. Размер ячеек в силу некоторых причин нужно поставить малым (на один символ), при этом кол-во столбцов немалое. Результат - в названиях столбцов не правильно отображаются цифры (видна только одна из нескольких). Появилась идея повернуть эти цифры на 90 градусов, чтобы они встали вертикально. Тогда при той же ширине столбцов они будут влезать полностью (толщину горизонтального хедэра можно увеличить). Но никак не могу разобраться, как можно повернуть текст.
Помогите, пожалуйста.


Название: Re: Повернуть текст на 90 град. в заголовках столбцов
Отправлено: ритт от Февраль 07, 2009, 18:33
отнаследоваться от QHeaderView и перегрузить отрисовку секции. затем скормить свой кастомный хидер своему QTable*


Название: Re: Повернуть текст на 90 град. в заголовках столбцов
Отправлено: fulkabaster от Февраль 08, 2009, 08:11
Простите, я не так давно знаком с Qt :)
Я правильно понимаю, что имеется ввиду перегрузка функции paintSection  у QHeaderView?


Название: Re: Повернуть текст на 90 град. в заголовках столбцов
Отправлено: ритт от Февраль 08, 2009, 08:32
правильно.


Название: Re: Повернуть текст на 90 град. в заголовках столбцов
Отправлено: fulkabaster от Февраль 08, 2009, 10:59
Все, что удалось найти об этой функции в мануале:

void QHeaderView::paintSection ( QPainter * painter, const QRect & rect, int logicalIndex ) const   [virtual protected]
Paints the section specified by the given logicalIndex, using the given painter and rect.
You normally would not need to use this function.

Непонятно, что такое logicalIndex и зачем он нужен  :(


Название: Re: Повернуть текст на 90 град. в заголовках столбцов
Отправлено: pastor от Февраль 08, 2009, 16:45
Непонятно, что такое logicalIndex и зачем он нужен  :(

Проще говоря, это индексы столбцов


Название: Re: Повернуть текст на 90 град. в заголовках столбцов
Отправлено: fulkabaster от Февраль 22, 2009, 14:57
Н-да, пытался че-то сделать, и понял, что пока это рановато для меня :) Я с некоторыми пункатми ООП не так плотно знаком (особ. наследование, виртуальные функции), больше на Си приходилось.

Если можно, пару вопросов попроще, также насчет QTableWidget:

1) Как вообще убрать хэдеры? (и вертикальные, и горизонтальные). Пробовал через takeHorizontalHeaderItem:

QTableWidgetItem *item = new QTableWidgetItem;
for (int i=0; i < table->columnCount(); i++)
  item = table->takeHorizontalHeaderItem(i);

Результата никакого - хэдеры остались.

2) Как зафиксировать сетку таблицы? (не дать юзеру возможность менять размеры строк/столбов мышкой)


Название: Re: Повернуть текст на 90 град. в заголовках сто
Отправлено: Karl-Philipp от Февраль 22, 2009, 16:30
1) попробуйте заголовки спрятать :)
Это можно сделать, например, как сказано в Ассистанте:
Цитировать
Visual Appearance

The table has a vertical header that can be obtained using the verticalHeader() function, and a horizontal header that is available through the horizontalHeader() function. The height of each row in the table can be found by using rowHeight(); similarly, the width of columns can be found using columnWidth(). Since both of these are plain widgets, you can hide either of them using their hide() functions.

2) для фиксации размеров:
- получаем заголовок (горизонтальный) таблицы c помощью метода
Цитировать
QHeaderView * QTableView::horizontalHeader () const

- указываем режим изменения:
Цитировать
void QHeaderView::resizeSections ( QHeaderView::ResizeMode mode )
в качестве ResizeMode указать QHeaderView::Fixed