LINUX.ORG.RU

Как скрыть кнопки прокрутки у QTreeView?

 


0

1

Сделал для QTreeView инерционную прокрутку (для Андроид).

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

Я пытаюсь сделать узким ползунок и убрать кнопки вверх-вниз так:

 object->verticalScrollBar()->setStyleSheet("QScrollBar {width:3px;} QScrollBar::up-arrow, QScrollBar::down-arrow {width: 0px; height: 0px;}");

- в результате кнопки не исчезают.

Почему так? Как скрыть кнопки вверх-вниз?

★★★★★

Ответ на: комментарий от Xintrea

И вот так не работает:

QScrollBar::add-line:vertical { border: none; background: none; height: 0px; } QScrollBar::sub-line:vertical { border: none; background: none; height: 0px; }

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от fluorite

Пока что нащупал такие стили:

object->verticalScrollBar()->setStyleSheet("QScrollBar {width:5px; border: none; background: transparent;}"
                                           "QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical {width: 1px; height: 25px; border: none;  background: #32CC99; image: url(:/resource/pic/transparent_dot.png); }"
                                           "QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical { image: url(:/resource/pic/transparent_dot.png); }");

То есть:

  • Задаю ширину вертикальной полосы прокрутки 5 px. Рамки нет. Задник прозрачный.
  • Задаю ширину кнопок вверх-вниз в 1 px. Высоту 25 px (чтобы была видна проблема, так как при высоте-ширине 0:0 проблема есть, но непонятно что происходит). Рамки нет. Задник кислотного зеленого цвета, чтоб видеть его.
  • Стрелки на кнопках заменяю прозрачной картинкой в 1 px.

И вот что получается. Увеличенная картинка верхней части скроллбара:

http://i.piccy.info/i9/991372a211664b7b27ef2bdd85cd2fce/1415476613/1737/59743...

Во-первых, прозрачности у бекгроунда всего скроллбара нет (серый цвет).

Во-вторых, зеленая кнопка «вверх» отрисовывается не на месте самой кнопки. То есть, видна она не с самого верха скроллбара. А с отступом в 5 пикселей. И видно, что наличествует серая область 5x5 px, которая резервируется под кнопку «вверх». То есть, под кнопку «вверх» выделяется не область 1x25 px, как задано в стиле, а тупо 5x5 px, просто по ширине скроллбара.

Сделай скроллбар шириной 7 px - зарезервируется область 7x7 px. И у зеленая кнопка «вверх» размером 1x25 px будет отрисовываться не от самого верха скроллбара, а с отступом в 7 px.

Самое неприятное, что высотой этой зарезервированной серой области невозможно управлять напрямую. Она просто равна ширине скроллбара. И движок, кстати, если прокрутить в самый верх, упирается в эту область. То есть, даже если задать высоту кнопок QScrollBar::add-line:vertical/QScrollBar::sub-line:vertical в 0 px, то движок все равно не доедет до самого конца скроллбара, а остановится на расстоянии ширины скроллбара.

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

Каким еще образом можно повлиять на кнопки вверх-вниз скроллбара, чтобы их скрыть?

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

Да, забыл сказать, cppcheck ошибку показывает:

Checking src/libraries/crypt/RC5Simple.cpp...
[src/libraries/crypt/RC5Simple.cpp:737]: (error) Resource leak: in_file

fluorite ★★★★★
()
Ответ на: комментарий от fluorite

Я никогда не пользовался статическим анализатором, все руки не доходили. Он что, нашел только одну ошибку во всем проекте?


По ошибке:

Имеется в виду, что при неудачном открытии файла (нуливой размер) генерируется код ошибки, а закрытия файла не происходит?

Там при ошибке открытия зашифрованного файла далее следует завершение программы, так что resouce leak ни на что не влияет.

Но для чистоты добавлю закрытие, спасибо за багрепорт.

Xintrea ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.