Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: gil9red от Сентябрь 06, 2012, 21:04



Название: [РЕШЕНО] Как узнать когда в QScrollArea не нужны скроллбары
Отправлено: gil9red от Сентябрь 06, 2012, 21:04
Здравствуйте! :)
Решил написать для своего проекта виджет-контейнер :)
Выглядит просто:
Есть QScrollArea на ней располагается визуальное
Есть ползунок QSlider с 3 состояниями: движение вверх, остановка и движение вниз
а перемещаются виджеты засунутые в QScrollArea
добавил QTimer, и ура! все само перемещается только двигай ползунком или вертикальным скроллом QScrollArea

вот только ползунок надо бы скрывать вместе с вертикальным скроллом QScrollArea, если все виджеты в QScrollArea видны

Сам вопрос:
и как узнать когда в QScrollArea не нужны скроллбары?
и можно пример этого? :)


Название: Re: Как узнать когда в QScrollArea не нужны скроллбары
Отправлено: mutineer от Сентябрь 06, 2012, 23:58
Ну например спросить видимость у скроллбаров


Название: Re: Как узнать когда в QScrollArea не нужны скроллбары
Отправлено: gil9red от Сентябрь 07, 2012, 06:25
При ресайз евенте?


Название: Re: Как узнать когда в QScrollArea не нужны скроллбары
Отправлено: GreatSnake от Сентябрь 07, 2012, 08:30
Ну например спросить видимость у скроллбаров
И как это соотносится с вопросом  ???
Просто не получится узнать. Нужно самому просчитывать :(
А чем не устроило
Код
C++ (Qt)
scrollarea->setHorizontalScrollBarPolicy( Qt::ScrollBarAsNeeded );
scrollarea->setVerticalScrollBarPolicy( Qt::ScrollBarAsNeeded );
 
?


Название: Re: Как узнать когда в QScrollArea не нужны скроллбары
Отправлено: gil9red от Сентябрь 07, 2012, 08:47
Тем что при исчезновении вертикального скроллбара нужно скрыть виджет не относящийся к QScrollArea, а именно QSlider :)


Название: Re: Как узнать когда в QScrollArea не нужны скроллбары
Отправлено: GreatSnake от Сентябрь 07, 2012, 10:33
Тем что при исчезновении вертикального скроллбара нужно скрыть виджет не относящийся к QScrollArea, а именно QSlider :)
Ну тогда можно следить за видимостью этого вертикального скроллбара через eventFilter().


Название: Re: Как узнать когда в QScrollArea не нужны скроллбары
Отправлено: mutineer от Сентябрь 07, 2012, 10:36
Тем что при исчезновении вертикального скроллбара нужно скрыть виджет не относящийся к QScrollArea, а именно QSlider :)
Ну тогда можно следить за видимостью этого вертикального скроллбара через eventFilter().

Вот именно так мой ответ и соотносится с вопросом


Название: Re: Как узнать когда в QScrollArea не нужны скроллбары
Отправлено: gil9red от Сентябрь 07, 2012, 16:05
Тем что при исчезновении вертикального скроллбара нужно скрыть виджет не относящийся к QScrollArea, а именно QSlider :)
Ну тогда можно следить за видимостью этого вертикального скроллбара через eventFilter().

А можно пример использования фильтра событий для слежения видимости? :)
никогда с ним не работал, и в таких случаях обходился наследованием с переопределением и сигналами :)


Название: Re: Как узнать когда в QScrollArea не нужны скроллбары
Отправлено: gil9red от Сентябрь 07, 2012, 16:50
Ну вроде правильно сделал :)
по крайней мере работает :)
фильтр:
Код:
bool Widget::eventFilter(QObject *object, QEvent *event)
{
    if(object == scrollArea->verticalScrollBar())
    {
        if(event->type() == QEvent::Show)
        {
            slider->show();
            return false;

        }else if(event->type() == QEvent::Hide)
        {
            slider->hide();
            return false;

        }else
        {
            return false;
        }
    }
    return false;
}

Поправьте, если получился быдлокод :)


Название: Re: Как узнать когда в QScrollArea не нужны скроллбары
Отправлено: gil9red от Сентябрь 07, 2012, 16:53
Какой же eventFilter удобный и простой)))

Скинул тестовый-рабочий проект, которые описывал в начале темы,
может кому то и пригодится :)