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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Узнать размер виджета выходящего за размеры экрана  (Прочитано 5562 раз)
iukash
Гость
« : Апрель 26, 2011, 12:16 »

Название темы лучше придумать не смог, сильно не пинайте! В общем проблема следующая, есть центральный виджет приложения QTreeWidget, необходимо определить его размер, но проблема в том что width() и height() возвращают размер виджета вписанного в окно приложения, то есть если размер приложения 600 на 600, то виджет будет примерно 600 на 550, но реально ели он больше у него появляются скроллбары. Так вот мне нужен размер виджета с учетом того размера который не видно но можно прокрутить по скроллам.
Записан
Denjs
Гость
« Ответ #1 : Апрель 26, 2011, 14:15 »

т..е надо узнать размер виджета отображаемого внутри QScroolArea? (иначе откуда это у вас появляются полосы прокрутки?)

поисследуйте подробнее объектную структуру вашего виджета (что кому как подчинено) 0- наверняка там где-то в иерархии есть ScroolArea, и попробуйте посмотреть в сторону его свойств?

и точнее скажите - вы width() и height() - пытаетесь узнать для виджета "_на_ котором отображен ScroolArea" или для виджета "который отображается _внутри_ ScroolArea" ?
Записан
iukash
Гость
« Ответ #2 : Апрель 26, 2011, 14:35 »

Виджет QTreeWidget, что внутри чего не знаю. имею ввиду как раз размер внутри QScroolArea.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Апрель 26, 2011, 14:53 »

ширина - QTreeWidget::horizontalScrollBar()->maximim()
высота - QTreeWidget::verticalScrollBar()->maximim()
Записан

Qt 5.11/4.8.7 (X11/Win)
iukash
Гость
« Ответ #4 : Апрель 26, 2011, 15:06 »

Цитировать
ширина - QTreeWidget::horizontalScrollBar()->maximim()
высота - QTreeWidget::verticalScrollBar()->maximim()
Они возвращают value слайдера, а мне надо размер.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #5 : Апрель 26, 2011, 15:10 »

Цитировать
Они возвращают value слайдера, а мне надо размер.
И зачем пороть чушь?
Записан

Qt 5.11/4.8.7 (X11/Win)
iukash
Гость
« Ответ #6 : Апрель 26, 2011, 15:17 »

Цитировать
Они возвращают value слайдера, а мне надо размер.
И зачем пороть чушь?
Какую чушь? Мне нужно узнать размер в пикселах. А что мне делать со значением которое мне вернул horizontalScrollBar()->maximim()?
Записан
Denjs
Гость
« Ответ #7 : Апрель 26, 2011, 15:55 »

...А что мне делать со значением которое мне вернул horizontalScrollBar()->maximim()?
а вот я бы при создании такого рода виджета - мог записать туда что-то связанное с положением внутреннего виджета в пикселях... (простите не могу сейчас проверить)
там что записано в вашем случае для вашего виджета?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #8 : Апрель 26, 2011, 15:57 »

Попробуй так:
Код
C++ (Qt)
QSize treeViewContentsSize( QTreeView* tv )
{
   QScrollBar* vsb = tv->verticalScrollBar();
   QScrollBar* hsb = tv->horizontalScrollBar();
   QRect vr( tv->visualRect( tv->model()->index( 0, 0 ) ) );
 
   return QSize(
       hsb->maximum() + hsb->pageStep (),
       ( vsb->maximum() + vsb->pageStep () ) * vr.height() );
}
 
Записан

Qt 5.11/4.8.7 (X11/Win)
Командор
Гость
« Ответ #9 : Апрель 26, 2011, 18:50 »

Сначала нужно перевести режим перемещения скрола в пиксельный:
Код:
   treeWidget->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);

После этого свойства скрола будут "пиксельными" и суммарный размер можно найти как:
Код:
    treeWidget->height() + treeWidget->verticalScrollBar()->maximum());
Записан
iukash
Гость
« Ответ #10 : Апрель 26, 2011, 20:23 »

Сначала нужно перевести режим перемещения скрола в пиксельный:
Код:
   treeWidget->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);

После этого свойства скрола будут "пиксельными" и суммарный размер можно найти как:
Код:
    treeWidget->height() + treeWidget->verticalScrollBar()->maximum());


Спасибо огромное! Как буду на работе попробую!

Denjs и GreatSnake вам тоже спасибо за помощь!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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