Название: Как скрыть кнопки прокрутки у QTreeView? Отправлено: xintrea от Ноябрь 07, 2014, 22:24 Сделал для QTreeView инерционную прокрутку (для Андроид).
Теперь надобность в кнопках вверх-вниз отпала. Их нужно скрыть, оставив только узкий ползунок, чтобы пользователь видел в каком месте дерева он находится. Я пытаюсь сделать узким ползунок и убрать кнопки вверх-вниз так: Код: object->verticalScrollBar()->setStyleSheet("QScrollBar {width:3px;} QScrollBar::up-arrow, QScrollBar::down-arrow {width: 0px; height: 0px;}"); - в результате кнопки не исчезают. Почему так? Как скрыть кнопки вверх-вниз? Название: Re: Как скрыть кнопки прокрутки у QTreeView? Отправлено: Johnik от Ноябрь 07, 2014, 23:38 у меня так работает:
Код
Название: Re: Как скрыть кнопки прокрутки у QTreeView? Отправлено: xintrea от Ноябрь 08, 2014, 21:35 у меня так работает: А у меня не работает. Не работает даже это: Код: object->verticalScrollBar()->setStyleSheet("QScrollBar::add-line:vertical { border: none; background: none; height: 0px; } QScrollBar::sub-line:vertical { border: none; background: none; height: 0px; }"); Единственное не чем я вижу, что стиль применяется - это вот: Код: object->verticalScrollBar()->setStyleSheet("QScrollBar {width:3px;}"); то есть этот стиль применяется, ширина скроллбара становится 3 px, но кнопки вверх-вниз видны - (точнее, видна их центральная часть, шириной 3 px). У меня складывается впечатление, что именно для verticalScrollBar()->setStyleSheet() надо задавать не стандарный Qss, а какой-то урезанный, который применяется только к элементам скроллбара. Ну или не нужены селекторы скроллбара или его элементов, они автоматически добавляются что ли. Кароче, третий день ковыряюсь, ничего не могу поделать с этой проблемой. Название: Re: Как скрыть кнопки прокрутки у QTreeView? Отправлено: Johnik от Ноябрь 08, 2014, 22:20 за центральные части отвечают следующие свойства:
Код попробуйте эти картинки сделать однопиксельными прозрачными. Название: Re: Как скрыть кнопки прокрутки у QTreeView? Отправлено: xintrea от Ноябрь 08, 2014, 23:20 за центральные части отвечают следующие свойства: Попробовал. Не получается. Пока что нащупал такие стили: Код: object->verticalScrollBar()->setStyleSheet("QScrollBar {width:5px; border: none; background: transparent;}" То есть:
И вот что получается. Увеличенная картинка верхней части скроллбара: http://i.piccy.info/i9/991372a211664b7b27ef2bdd85cd2fce/1415476613/1737/597435/scr_364.png Во-первых, прозрачности у бекгроунда всего скроллбара нет (серый цвет). Во-вторых, зеленая кнопка "вверх" отрисовывается не на месте самой кнопки. То есть, видна она не с самого верха скроллбара. А с отступом в 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 невозможно установить высоту кнопок скроллбара. Во всяком случае, у меня именно так. Каким еще образом можно повлиять на кнопки вверх-вниз скроллбара, чтобы их скрыть? Название: Re: Как скрыть кнопки прокрутки у QTreeView? Отправлено: Johnik от Ноябрь 09, 2014, 00:18 Во-вторых, зеленая кнопка "вверх" отрисовывается не на месте самой кнопки. То есть, видна она не с самого верха скроллбара. А с отступом в 5 пикселей. И видно, что наличествует серая область 5x5 px, которая резервируется под кнопку "вверх". То есть, под кнопку "вверх" выделяется не область 1x25 px, как задано в стиле, а тупо 5x5 px, просто по ширине скроллбара. в моем первом примере есть указание margin, именно для того чтоб убрать зарезервированную областьСделай скроллбар шириной 7 px - зарезервируется область 7x7 px. И у зеленая кнопка "вверх" размером 1x25 px будет отрисовываться не от самого верха скроллбара, а с отступом в 7 px. Самое неприятное, что высотой этой зарезервированной серой области невозможно управлять напрямую. Она просто равна ширине скроллбара. И движок, кстати, если прокрутить в самый верх, упирается в эту область. То есть, даже если задать высоту кнопок QScrollBar::add-line:vertical/QScrollBar::sub-line:vertical в 0 px, то движок все равно не доедет до самого конца скроллбара, а остановится на расстоянии ширины скроллбара. вы плохо изучили пример работы с QScrollBar из QSS у QScrollBar нет свойств без указания субконтролов, а значит предложение ("QScrollBar {width:5px; border: none; background: transparent;}") в вашем примере полностью не задействовано вот пример, я делал по нему, и у меня все получилось (правда не андроид): http://qt-project.org/doc/qt-5/stylesheet-examples.html#customizing-qscrollbar Название: Re: Как скрыть кнопки прокрутки у QTreeView? Отправлено: xintrea от Ноябрь 09, 2014, 16:22 вы плохо изучили пример работы с QScrollBar из QSS у QScrollBar нет свойств без указания субконтролов, а значит предложение ("QScrollBar {width:5px; border: none; background: transparent;}") в вашем примере полностью не задействовано QSS - это разновидность каскадных таблиц стилей. То, что задано для всего элемента, должно применится для субконтролов. В документации по вашей ссылке нигде не сказано, что субконтролы должны указываться обязательно: Цитировать Customizing QScrollBar The QScrollBar can be styled using its subcontrols like handle, add-line, sub-line, and so on. Note that if one property or sub-control is customized, all the other properties or sub-controls must be customized as well. Перенастройка QScrollBar QScrollBar может быть стилизован через его субконтролы, такие как handle, add-line, sub-line, и прочие. Запомните, что даже если одно свойство или субконтрол были перенастроены, все другие свойства или субконтролы должны быть так же перенастроены. В упор не вижу, где здесь говорится о том, что субконтролы должны прописываться обязательно. вот пример, я делал по нему, и у меня все получилось (правда не андроид): http://qt-project.org/doc/qt-5/stylesheet-examples.html#customizing-qscrollbar Теперь когда вы сказали, я заметил, что в этом примере нет ни одной строчки без субконтрола. Пока сам решал, каких только примеров не насмотрелся. И самый действенный оказался: Код: ScrollBar {width:3px;} То есть, без субконтролов таки работает. Попробую поиграться с margin, я его еще толком не ковырял. Название: Re: Как скрыть кнопки прокрутки у QTreeView? Отправлено: xintrea от Ноябрь 09, 2014, 17:27 Да, margin помог, спасибо.
|