Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Jo от Декабрь 09, 2009, 14:28



Название: Вопросик по QHeaderView
Отправлено: Jo от Декабрь 09, 2009, 14:28
Выставляю в горизонтального заголовка setStretchLastSection(true);

Т.о. последняя колонка прилипает к правому краю моей вьюхи, собственно это метод и делает.

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


|___|___|
|     |     |
|     |     |
|     |     |
|     |     |


|_____|_|
|        |  |
|        |  |
|        |  |
|        |  |


|_____||
|        ||
|        ||
|        ||
|        ||

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

Чего то я колупаюсь и понять не могу.
Помогите пож


В общем нужно что бы сплиттер который посередине, таскался только в этих размерах.

Нашел такой метод setMinimumSectionSize, а вот Максимальный размер секции не знаю как установить. (((


Название: Re: Вопросик по QHeaderView
Отправлено: Павел_F. от Декабрь 09, 2009, 16:22
У меня все работает именно так, как вы хотите.
Ничего для этого не изобретал.
Код:
  Table = new QTableWidget( this);
  Table->setRowCount( 0);
  Table->setColumnCount( 3);
  Table->resizeColumnsToContents();
  Table->resizeRowsToContents();
  QHeaderView * headH = Table->horizontalHeader();
  headH->setStretchLastSection( true);
Никаких скролов не появляется...
PS: правда Qt 4.6.0


Название: Re: Вопросик по QHeaderView
Отправлено: Павел_F. от Декабрь 09, 2009, 18:07
понял я в чем проблема. Вы, задавая MinimumSectionSize, задаете его и для последней секции. И поэтому даже задавая stretchLastSection она, последняя секция, не может быть меньше  minimumSectionSize. В моем же случае она может хоть до нуля уменьшаться. Вывод: не задавайте MinimumSectionSize или терпите появление скролов.


Название: Re: Вопросик по QHeaderView
Отправлено: Jo от Декабрь 09, 2009, 20:08
просто когда последняя секция становится меньше minimumSectionSize, она начинает убегать за приделы таблицы, поэтому скрол и появляется.

Проблема не в том что мне скрол не нравится, а в том что я хочу что бы последняя секция не убегала. т.е. что бы мог менять размер секций внутри таблицы, и последняя секция не выходила за пределы.

Порылся в исходнике шапки увидел в методе mouseMoveEvent что походу без переопределения этого метода проблему не решить (((

Нет других путей?

Да и сплиттер последней секции надо вообще как то отключить, что бы нельзя было его таскать.......


Название: Re: Вопросик по QHeaderView
Отправлено: Павел_F. от Декабрь 09, 2009, 21:44
Ну... все хорошо в "стандартных" задачах. То что вы говорите это не нормальное, не привычное поведение таблицы. и вариантов я вижу три:
- Вы не совсем верно выбрали путь и, возможно, стоит пересмотреть ваш взгляд на интерфейс. И использовать не таблицу или не только ее.
- Вам действительно это надо. Тогда почти с нуля писать свою реализацию "странной" таблицы.
- Я не правильно понял то, что вы хотите сделать.
А окончательный выбор за вами.


Название: Re: Вопросик по QHeaderView
Отправлено: Jo от Декабрь 09, 2009, 22:26
Согласен с тем что таблица "странная", да и переписывать с нуля думаю тоже не выход. Переопределю нужный метод и надеюсь заработает так как надо мне.

Думал что можно стандартными методами настроить, вот и спрашивал.


Название: Re: Вопросик по QHeaderView
Отправлено: Павел_F. от Декабрь 09, 2009, 22:45
mouseMoveEvent, скорее всего, не решит все что вам не нравится у QTableWidget. Думаю переписывать придеться гораздо больше всего.