2016-12-13 1 views
3

Also habe ich eine benutzerdefinierte QWindow in ein Widget mit createWindowContainer gewickelt. Standardmäßig wird ein ungültiger Größenhinweis (-1) angezeigt, da sich das QWindow nicht in einem Layout befindet. Außerdem hat QWindow keinen Größenhinweis.Paradigmatische sizeHint() aus QWidget :: createWindowContainer?

Wie kann ich die sizeHint() mit einer Funktion in angeben?

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

Berichtet als „Bug“ https://bugreports.qt.io/browse/QTBUG-57693 – Mikhail

Antwort

0

Ich habe etwas auf dem Bug Tracker gepostet, die aktuelle Methode besteht darin, ein zweites Widget zu verwenden, um die Größe zu "schattieren".

Der Code sieht ungefähr so ​​aus:

In den Konstruktor der Eltern

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

Im Grßenänderungsereignis der Eltern

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); 
} 

Wo PlaceHolderWidget Überschreibungen sizeHint(). https://bugreports.qt.io/browse/QTBUG-57693

1

Überschreiben virtual const QSize& sizeHint() const Verfahren zum Wrapper, Verfahren, die einfach QWindow::size() seiner gewickelten Fenster zurückkehren.

+0

Ich bin nicht sicher, was du meinst, 'createWindowContainer' ein QWidget zurückgibt, anstatt eine benutzerdefinierte Klasse meiner Design. – Mikhail

+0

Ah, ich sehe, Sie haben keine Kontrolle über die Factory-Methode der Widgets. Kannst du deinen Code ändern, um eine solche Methode zu verwenden, die du schreiben wirst? –