2016-12-02 1 views
1

http://doc.qt.io/qt-4.8/qgridlayout.html#QGridLayout-2QGridLayout: Sie müssen dieses Raster in ein anderes Layout einfügen

Was bedeutet das folgende Zitat bedeuten?

Sie müssen dieses Raster in ein anderes Layout einfügen. Sie können Widgets und Layouts jederzeit in dieses Layout einfügen, aber das Layout wird nicht ausgeführt, bevor es in ein anderes Layout eingefügt wird.

Ich habe es in keinem Layout eingefügt, noch habe ich die Eltern festgelegt. Warum funktioniert das?

void Screen::displayWordOnScreen() 
{ 
    for (uint i = 0; i < NumOfBlanks; i++) 
    { 
     blank[i] = createBlank (SLOT (blankFilled (QString))); 
    } 

    QGridLayout *mainLayout = new QGridLayout; 
    mainLayout->setSizeConstraint (QLayout::SetFixedSize); 

    for (uint i = 0; i < NumOfBlanks; i++) 
    { 
     mainLayout->addWidget (blank[i], 0, i); 
    } 

    setLayout (mainLayout); 
} 

Antwort

1

Es ist ein Dokumentationsfehler. Rein und einfach.

Der Anruf setMainLayout ist redundant. Sie können ein Layout festlegen, indem Sie das Widget gibt es auf als ihre Mutter handeln sollte:

auto mainLayout = new QGridLayout(this); 

Sie können auch dynamisch das Layout erstellen müssen - es von Wert gehalten werden kann. Da es scheint, dass NumOfBlanks eine Kompilierzeitkonstante ist, könnten Sie alles vereinfachen:

1

Ich weiß nicht, warum die Dokumente so geschrieben sind, aber Sie müssen Layouts keine Layouts hinzufügen. Sie können, aber Sie müssen nicht.

Sie können ein Layout für ein Widget festlegen, so wie Sie es in Ihrem Code tun. Irgendwann musst du das tun. Wenn Sie jedes Layout einem anderen Layout hinzufügen müssten, hätten Sie kein Layout, das das Layout des Widgets verwaltet. Sie hätten nur Layouts, die nichts tun. Dieser Satz in den Dokumenten ergibt also keinen Sinn.

Verwandte Themen