Почему Qt::AlignTop не работает в QVBoxLayout, который я использую как основной макет?

У меня есть простой класс, который наследует QDialog, я динамически добавляю элементы, и мои элементы расположены в центре, но я хочу добавить их сверху.

class CustomDialog : public QDialog {
    Q_OBJECT
private:
    QVBoxLayout *mainLayout;
CustomDialog() 
{
     mainLayout = new QVBoxLayout();
    setLayout(mainLayout);
}
public:
    void update() 
   {
    QLabel* label = new QLabel("some text");

    QVBoxLayout *verLayout = new QVBoxLayout;
    verLayout->addStretch();
    verLayout->setAlignment(Qt::AlignTop);

    verLayout->addWidget(label, Qt::AlignTop); 
    mainLayout->setAlignment(Qt::AlignTop);
    mainLayout->addLayout(verLayout, Qt::AlignTop);
    }
};

Что я делаю неправильно? а почему мои динамически добавленные элементы всегда в центре?

1 ответ

Я понимаю, что вы хотите разместить его и показать верхнюю часть, так что вы можете использовать QSpacerItem, чтобы протолкнуть его.

class CustomDialog : public QDialog {
    Q_OBJECT
    QVBoxLayout *mainLayout;

public:
    CustomDialog(QWidget *parent=0): QDialog(parent)
    {
        mainLayout = new QVBoxLayout(this);

        QSpacerItem *verticalSpacer = new QSpacerItem(20, 217, QSizePolicy::Minimum, QSizePolicy::Expanding);
        mainLayout->addItem(verticalSpacer);

        addWidgets("1");
        addWidgets("2");
    }
private:
    void addWidgets(const QString &text)
    {
        QLabel* label = new QLabel(text);

        QVBoxLayout *verLayout = new QVBoxLayout;
        verLayout->addStretch();
        verLayout->setAlignment(Qt::AlignTop);

        verLayout->addWidget(label, Qt::AlignTop);
        mainLayout->setAlignment(Qt::AlignTop);
        mainLayout->insertLayout(mainLayout->count()-1, verLayout);
    }
};

Или, если вы хотите, чтобы он имел обратный порядок, вы должны вставить его в первую позицию с помощью:

mainLayout->insertLayout(0, verLayout);

Примечание: использование addLayout некорректно, так как второй параметр stretch,

Другие вопросы по тегам