Russian Qt Forum

Qt => Общие вопросы => Тема начата: iukash от Апрель 26, 2011, 12:16



Название: Узнать размер виджета выходящего за размеры экрана
Отправлено: iukash от Апрель 26, 2011, 12:16
Название темы лучше придумать не смог, сильно не пинайте! В общем проблема следующая, есть центральный виджет приложения QTreeWidget, необходимо определить его размер, но проблема в том что width() и height() возвращают размер виджета вписанного в окно приложения, то есть если размер приложения 600 на 600, то виджет будет примерно 600 на 550, но реально ели он больше у него появляются скроллбары. Так вот мне нужен размер виджета с учетом того размера который не видно но можно прокрутить по скроллам.


Название: Re: Узнать размер виджета выходящего за размеры экрана
Отправлено: Denjs от Апрель 26, 2011, 14:15
т..е надо узнать размер виджета отображаемого внутри QScroolArea? (иначе откуда это у вас появляются полосы прокрутки?)

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

и точнее скажите - вы width() и height() - пытаетесь узнать для виджета "_на_ котором отображен ScroolArea" или для виджета "который отображается _внутри_ ScroolArea" ?


Название: Re: Узнать размер виджета выходящего за размеры экрана
Отправлено: iukash от Апрель 26, 2011, 14:35
Виджет QTreeWidget, что внутри чего не знаю. имею ввиду как раз размер внутри QScroolArea.


Название: Re: Узнать размер виджета выходящего за размеры экрана
Отправлено: GreatSnake от Апрель 26, 2011, 14:53
ширина - QTreeWidget::horizontalScrollBar()->maximim()
высота - QTreeWidget::verticalScrollBar()->maximim()


Название: Re: Узнать размер виджета выходящего за размеры экрана
Отправлено: iukash от Апрель 26, 2011, 15:06
Цитировать
ширина - QTreeWidget::horizontalScrollBar()->maximim()
высота - QTreeWidget::verticalScrollBar()->maximim()
Они возвращают value слайдера, а мне надо размер.


Название: Re: Узнать размер виджета выходящего за размеры экрана
Отправлено: GreatSnake от Апрель 26, 2011, 15:10
Цитировать
Они возвращают value слайдера, а мне надо размер.
И зачем пороть чушь?


Название: Re: Узнать размер виджета выходящего за размеры экрана
Отправлено: iukash от Апрель 26, 2011, 15:17
Цитировать
Они возвращают value слайдера, а мне надо размер.
И зачем пороть чушь?
Какую чушь? Мне нужно узнать размер в пикселах. А что мне делать со значением которое мне вернул horizontalScrollBar()->maximim()?


Название: Re: Узнать размер виджета выходящего за размеры экрана
Отправлено: Denjs от Апрель 26, 2011, 15:55
...А что мне делать со значением которое мне вернул horizontalScrollBar()->maximim()?
а вот я бы при создании такого рода виджета - мог записать туда что-то связанное с положением внутреннего виджета в пикселях... (простите не могу сейчас проверить)
там что записано в вашем случае для вашего виджета?


Название: Re: Узнать размер виджета выходящего за размеры экрана
Отправлено: GreatSnake от Апрель 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() );
}
 


Название: Re: Узнать размер виджета выходящего за размеры экрана
Отправлено: Командор от Апрель 26, 2011, 18:50
Сначала нужно перевести режим перемещения скрола в пиксельный:
Код:
   treeWidget->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);

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


Название: Re: Узнать размер виджета выходящего за размеры экрана
Отправлено: iukash от Апрель 26, 2011, 20:23
Сначала нужно перевести режим перемещения скрола в пиксельный:
Код:
   treeWidget->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);

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


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

Denjs и GreatSnake вам тоже спасибо за помощь!