Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: djassan от Май 18, 2010, 14:08



Название: QHeaderView Child scroll problems
Отправлено: djassan от Май 18, 2010, 14:08
Здравствуйте!
Создал класс наследник от QHeaderView, внутри ничего кроме метода заполнения данными.
И плюс прямо в конструкторе прописал setHorizontalScrollBarPolicy( Qt::ScrollBarAsNeeded );
Scroll есть, но при перемещении бегунка ничего не происходит, хотя по идее должно - весь header не вмещается в окно.
Попробовал написал свой метод реакции на перемещение бегунка, состоящий из вызова одного метода scroll(value,0) (унаследована от QWidget::scroll(int dx,int dy))
Но тогда перемещается вообще весь header, вместе со своим внутренним scrollBar, то есть вся ScrollArea что и понятно.
Как быть-то?
Как сделать работающий горизонтальный скролл для моего наследника от QHeaderView?
Создавать для него новую QScrollArea плохо, зачем, если у него своя есть встроенная.


Название: Re: QHeaderView Child scroll problems
Отправлено: crossly от Май 18, 2010, 14:20
я думал setHorizontalScrollBarPolicy применяется к вьюхе а не к хидеру.... ??


Название: Re: QHeaderView Child scroll problems
Отправлено: djassan от Май 18, 2010, 14:28
Забыл упомянуть, мой header отдельный элемент, он не в составе QTableView или  QTableWidget.
Собственно основная моя задача в создании элемента состоящего из наследников QTableWidget и QHeaderView.

Поясню почему header отдельно, мне надо что бы можно было изменять ширину секций хедера,
не меняя ширину столбцов таблицы, то есть секция хедера может быть с шириной равной 1,2,3,4,5...ширине столбца таблицы.
А в QTableWidget я не смог сделать так, что бы при изменении пользователем ширины секции хедера,
 не происходило изменение ширину столбца таблицы, поэтому разделил элементы, а теперь мне нужно сделать синхонный горизонтальный скрол соделжимого таблицы и секций хедера


Название: Re: QHeaderView Child scroll problems
Отправлено: crossly от Май 18, 2010, 14:42
вам не кажется что если размеры секции хидера и размеры столбцов будут отличатся то и размер скрола будет разный??... или я чего то не понимаю... ??


Название: Re: QHeaderView Child scroll problems
Отправлено: djassan от Май 18, 2010, 15:52
Так секций в хедере может быть 20, а столбцов в таблице 80. Каждая секция хедера имеет размер кратный размерам столбцов. Сумма длин секций хедера равна суммам широт столбцов.
То есть пользователь, допустим делает n-ую секцию хедера шириной в три столбца, и мы можем дальше работать с этими столбцами.
Элементы управления хедер и таблица связаны логически. Но физически это отдельные элементы, которые мне надо синхронизировать по скролу, чтоб при скроллинге не сползало.


Название: Re: QHeaderView Child scroll problems
Отправлено: djassan от Май 19, 2010, 12:56
Прошу прощения за сумбур!
Постараюсь сформулировать четче:
У QHeaderView как и у QTableWidget, есть своя ScrollArea.
Так вот у QTableWidget достаточно прописать свойство setHorizontalScrollBarPolicy( Qt::ScrollBarAsNeeded );, хотя оно и по умолчанию так,
и бегунок скрола видно и скролится все нормально.

У QHeaderView при прописывании setHorizontalScrollBarPolicy( Qt::ScrollBarAsNeeded );, бегунок видно, но сам хэдер на его движения не реагирует,
не скролится. В чем может быть дело?

Как и говорил ранее QHeaderView на форме отдельный виджет и не входит ни в состав QTableWidget, ни в состав QTableView.
Пробовал создать QScrollArea и поместить в него QHeaderView , скролинг работает нормально, а вот собственная scrollArea хэдера ни в какую.