2016-12-13 10 views
3

したがって、createWindowContainerを使用してウィジェットにカスタムQWindowをラップしました。デフォルトでは、QWindowがレイアウト内にないため、無効なサイズのヒント(-1)が返されます。さらに、QWindowにはサイズヒントがありません。QWidget :: createWindowContainerのparadigmatic sizeHint()ですか?

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

私はバグトラッカーに何かを投稿しましたが、現在の方法は2番目のウィジェットを使ってサイズを「シャドー」することです。親のサイズ変更イベント

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()では、親のコンストラクタで

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

コードは次のように見えます。 https://bugreports.qt.io/browse/QTBUG-57693

「バグ」として報告
1

ラッパーにvirtual const QSize& sizeHint() const方法、単にその包まウィンドウのQWindow::size()を返すメソッドを上書き。

+0

私は 'createWindowContainer'はむしろ私のカスタムクラスよりも、QWidgetのを返し、あなたは何を意味するかわからないんだけど設計。 – Mikhail

+0

ああ、あなたはウィジェットのファクトリメソッドを制御できません。あなたは、あなたが書くつもりのような方法を利用するためにコードを切り替えることができますか? –

関連する問題