2016-12-13 106 views
3

所以,我使用createWindowContainer將一個自定義QWindow包裝在一個小部件中。默認情況下,這會提供無效的大小提示(-1),因爲QWindow不在佈局中。此外,QWindow沒有尺寸提示。來自QWidget :: createWindowContainer的Paradigmatic sizeHint()

如何使用render_surface中的函數指定sizeHint()

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

我在bug跟蹤器上發佈了一些東西,當前的方法是使用第二個小部件來「隱藏」大小。

代碼看起來是這樣的:

在父類的構造

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

在父母的resize事件

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

啊,我明白了,您無法控制小工具的工廠方法。你可以轉換你的代碼來使用你將要寫的這種方法嗎? –