2016-04-08 8 views
0

das Layout Betrachtet wurde in einem QWidget mit dem folgenden Code festgelegt. Dies wurde mit dem folgenden Code getan:qobject_cast <QVBoxLayout *> (layout()), ist die passende Besetzung?</p> <pre><code>setLayout(new QVBoxLayout); </code></pre> <p>Und dann muss es abgerufen werden (hinzufügen mehr Material, um das Layout):

QHBoxLayout *hLayoutTime(new QHBoxLayout); 
qobject_cast<QVBoxLayout*>(layout())->addLayout(hLayoutTime); 

qobject_cast die geeignete Art von Guss ist hier zu benutzen?

+1

ist es in Ordnung, in der Tat würde statischer_cast hier besser sein. Auf der anderen Seite erstellen Sie unnötige Probleme. Verwenden Sie nur lokale Variablen, um Ihre Layoutstruktur zu erstellen. –

Antwort

1

Um zu vermeiden, unneded Gießen dies wie folgt schreiben:

void YourWidget::setupContents() 
{ 
    QVBoxLayout *vLayout = new QVBoxLayout(this); // effectively this does setLayout(new QVBoxLayout); 

    QHBoxLayout *hLayoutTime(new QHBoxLayout); 
    vLayout->addLayout(hLayoutTime); 
    … … … 
} 
0

den Code in Ihrem aktuellen Beispiel Sehen, Warum Sie nicht einfach den Zeiger erhalten beim Erstellen?

auto *vLayout = new QVBoxLayout; 
auto *hLayoutTime = new QHBoxLayout; 
vLayout->addlaout(hLayoutTime); 

Beantwortung Ihrer Frage, wahrscheinlich die am besten geeignete Besetzung ist:

dynamic_cast<QHBoxLayout*>(new QVBoxLayout); 

dynamic_cast mehrere Prüfungen und Vorteile gegenüber static_cast hat, so ist es besser, es zu verwenden, wenn möglich.

+0

Ich frage mich, ob @Marek R in Bezug auf 'dynamic_cast' mit Ihnen einverstanden ist. – KcFnMi

+0

@KcFnMi Gute Frage ;-) –

+0

'qobject_cast' ist äquivalent zu' dynamic_cast', ist aber Qt-spezifisch. Ich habe irgendwo gelesen, dass 'dynamic_cast' einige Probleme mit Bibliotheken hat und' qobject_cast' dieses Problem nicht hat (Ich habe den Link nicht gespeichert. Ich werde versuchen, ihn zu finden). –