Почему 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);
}
};

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

0

Решение

Я понимаю, что вы хотите разместить его и показать верхнюю часть, так что вы можете использовать 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,

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]