Russian Qt Forum
Май 04, 2024, 09:20 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Как узнать когда в QScrollArea не нужны скроллбары  (Прочитано 5202 раз)
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« : Сентябрь 06, 2012, 21:04 »

Здравствуйте! Улыбающийся
Решил написать для своего проекта виджет-контейнер Улыбающийся
Выглядит просто:
Есть QScrollArea на ней располагается визуальное
Есть ползунок QSlider с 3 состояниями: движение вверх, остановка и движение вниз
а перемещаются виджеты засунутые в QScrollArea
добавил QTimer, и ура! все само перемещается только двигай ползунком или вертикальным скроллом QScrollArea

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

Сам вопрос:
и как узнать когда в QScrollArea не нужны скроллбары?
и можно пример этого? Улыбающийся
« Последнее редактирование: Ноябрь 11, 2012, 20:32 от gil9red » Записан

mutineer
Гость
« Ответ #1 : Сентябрь 06, 2012, 23:58 »

Ну например спросить видимость у скроллбаров
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #2 : Сентябрь 07, 2012, 06:25 »

При ресайз евенте?
Записан

GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Сентябрь 07, 2012, 08:30 »

Ну например спросить видимость у скроллбаров
И как это соотносится с вопросом  Непонимающий
Просто не получится узнать. Нужно самому просчитывать Грустный
А чем не устроило
Код
C++ (Qt)
scrollarea->setHorizontalScrollBarPolicy( Qt::ScrollBarAsNeeded );
scrollarea->setVerticalScrollBarPolicy( Qt::ScrollBarAsNeeded );
 
?
« Последнее редактирование: Сентябрь 07, 2012, 08:45 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #4 : Сентябрь 07, 2012, 08:47 »

Тем что при исчезновении вертикального скроллбара нужно скрыть виджет не относящийся к QScrollArea, а именно QSlider Улыбающийся
Записан

GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #5 : Сентябрь 07, 2012, 10:33 »

Тем что при исчезновении вертикального скроллбара нужно скрыть виджет не относящийся к QScrollArea, а именно QSlider Улыбающийся
Ну тогда можно следить за видимостью этого вертикального скроллбара через eventFilter().
Записан

Qt 5.11/4.8.7 (X11/Win)
mutineer
Гость
« Ответ #6 : Сентябрь 07, 2012, 10:36 »

Тем что при исчезновении вертикального скроллбара нужно скрыть виджет не относящийся к QScrollArea, а именно QSlider Улыбающийся
Ну тогда можно следить за видимостью этого вертикального скроллбара через eventFilter().

Вот именно так мой ответ и соотносится с вопросом
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #7 : Сентябрь 07, 2012, 16:05 »

Тем что при исчезновении вертикального скроллбара нужно скрыть виджет не относящийся к QScrollArea, а именно QSlider Улыбающийся
Ну тогда можно следить за видимостью этого вертикального скроллбара через eventFilter().

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

gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #8 : Сентябрь 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;
}

Поправьте, если получился быдлокод Улыбающийся
Записан

gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #9 : Сентябрь 07, 2012, 16:53 »

Какой же eventFilter удобный и простой)))

Скинул тестовый-рабочий проект, которые описывал в начале темы,
может кому то и пригодится Улыбающийся
« Последнее редактирование: Сентябрь 07, 2012, 17:06 от gil9red » Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.081 секунд. Запросов: 23.