2016-04-06 2 views
0

В настоящее время я пытаюсь настроить размер шага вертикальной полосы прокрутки на высоту объектов внутри прокручиваемого и реагирующего QVBoxLayout. Так что один шаг прокрутки точно прокручивает один виджет вниз. Все объекты внутри QVBoxLayout имеют одинаковую геометрию.Как получить текущую ширину QWidget внутри отзывчивого QVBoxLayout?

Поэтому мне нужна текущая (живая) высота одного из объектов внутри QVBoxLayout. Я уже пробовал следующие методы:

Объект инициализирован высотой 300 (не фиксированный). Затем высота настраивается динамически, изменяя размер окна, включая QVBoxLayout.

QWidget* pWidget = PointerToMyWidgetInsideQVBoxLayout; 
std::cout << "height:" << pWidget->height() << std::endl; /// @todo PHIL: height gives only initial value, not current height 
std::cout << "geometry-height:" << pWidget->geometry().height() << std::endl; 
std::cout << "frameSize-height:" << pWidget->frameSize().height() << std::endl; 
std::cout << "frameGeometry-height:" << pWidget->frameGeometry().height() << std::endl; 
std::cout << "normalGeometryheight:" << pWidget->normalGeometry().height() << std::endl; 
std::cout << "minimumHeight-height:" << pWidget->minimumHeight() << std::endl; 
std::cout << "maximumHeight-height:" << pWidget->maximumHeight() << std::endl; 
std::cout << "sizeHint-height:" << pWidget->sizeHint().height() << std::endl; 

Это приводит следующий вывод:

height:300 
geometry-height:300 
frameSize-height:300 
frameGeometry-height:300 
normalGeometryheight:300 
minimumHeight-height:0 
maximumHeight-height:16777215 
sizeHint-height:50 

Большое спасибо заранее за вашу помощь!

+0

Может быть, '' std :: cout' при каждом изменении размера виджета? – IAmInPLS

+0

Подкласс 'QWidget' и переопределить [' resizeEvent'] (http://doc.qt.io/qt-5/qwidget.html#resizeEvent). Затем там испускают некоторый сигнал, который отправляет новый размер в качестве аргумента. Или, если вы не хотите подкласса, просто установите фильтр событий (http://doc.qt.io/qt-5/eventsandfilters.html#event-filters). – thuga

+0

В чём проблема? Выводимые значения ** корректны в момент их получения **. Вам нужно получить значения ** после ** изменения размера виджета, подсказки подсказки. –

ответ

1

Метод QWidget::height() возвращает фактический размер виджета, а не только тот, который находится при инициализации: см. Это answer.

+0

Благодарим за помощь. Я понял проблему: Я запросил высоту до того, как цикл события выполнил изменение размера виджета. –

Смежные вопросы