2016-12-13 3 views
3

Итак, я обернул пользовательский QWindow в виде виджета, используя createWindowContainer. По умолчанию это дает недопустимый подсказку размера (-1), потому что QWindow не находится в макете. Кроме того, QWindow не имеет подсказки размера.Парадигматический размерHint() из QWidget :: createWindowContainer?

Как я могу указать sizeHint() с помощью функции в render_surface?

window_container = QWidget::createWindowContainer(render_surface); 
auto hint = window_container->sizeHint(); // how do I specify this? 
std::cout << hint.width() << std::endl; //invalid 
+0

Сообщил как «ошибка» https://bugreports.qt.io/browse/QTBUG-57693 – Mikhail

ответ

0

Я разместил что-то на трекере ошибок, текущий метод - использовать второй виджет для «тени» размера.

код выглядит примерно так:

В конструктор родителя

auto window_container = QWidget::createWindowContainer(render_surface); 
window_container->setLayout(new QGridLayout()); 
fml = new PlaceHolderWidget; 
window_container->layout()->addWidget(fml); 

В случае изменения размера родительского

void RenderContainer::resizeEvent(QResizeEvent *event) 
{ 
    auto frame_size = render_surface->img_size; 
    if (frame_size.n() > 0) 
    { 
     ... 
     fml->setSizeHint(QSize(predicted_width, predicted_height)); 
    } 
    QWidget::resizeEvent(event); 
} 

PlaceHolderWidget Где переопределяет sizeHint(). https://bugreports.qt.io/browse/QTBUG-57693

1

Перезапись virtual const QSize& sizeHint() const метода обертки, метод, который просто возвращает QWindow::size() его обернутое окно.

+0

Я не уверен, что вы имеете в виду, 'createWindowContainer' возвращает QWidget, а не пользовательский класс моего дизайн. – Mikhail

+0

А, я вижу, у вас нет контроля над заводским методом виджетов. Можете ли вы переключить свой код, чтобы использовать такой метод, который вы собираетесь писать? –

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