QWidget :: setLayout: Tentative de définir QLayout "" sur Widget "", qui a déjà une mise en page
Je suis en train de définir la mise en page d'un widget manuellement à l'aide de code (pas dans Designer), mais je suis en train de faire quelque chose de mal, parce que je reçois cet avertissement:
QWidget::setLayout: Tentative de définition de QLayout "", "Widget", qui a déjà une mise en page
Et aussi la mise en page est foiré (le label est en haut au lieu du bas).
Ceci est un exemple de code qui reproduit le problème:
Widget::Widget(QWidget *parent) :
QWidget(parent)
{
QLabel *label = new QLabel("Test", this);
QHBoxLayout *hlayout = new QHBoxLayout(this);
QVBoxLayout *vlayout = new QVBoxLayout(this);
QSpacerItem *spacer = new QSpacerItem(40, 20, QSizePolicy::Fixed);
QLineEdit *lineEdit = new QLineEdit(this);
hlayout->addItem(spacer);
hlayout->addWidget(lineEdit);
vlayout->addLayout(hlayout);
vlayout->addWidget(label);
setLayout(vlayout);
}
source d'informationauteur user1369511
Vous devez vous connecter pour publier un commentaire.
Donc je crois que votre problème est dans cette ligne:
En particulier, je pense que le problème est le passage
this
dans leQHBoxLayout
. Parce que vous avez l'intention de cetteQHBoxLayout
de ne PAS être le top niveau de la mise en page dethis
vous ne devez pas passerthis
dans le constructeur.Voici mon re-écrire que je l'ai piraté une application de test en local et semble fonctionner à merveille:
Le problème, c'est que vous êtes la création de mises en page avec un parent de
this
. Lorsque vous faites cela, il définit la mise en page à la page principale dethis
. Ainsi, il est superflu d'appelsetMainLayout()
.