C++ 为什么Qt::AlignTop不';我在QVBoxLayout中不能像主布局那样工作吗?
我有一个继承QDialog的简单类,我动态添加元素 我的元素位于中间,但我想将它们添加到顶部C++ 为什么Qt::AlignTop不';我在QVBoxLayout中不能像主布局那样工作吗?,c++,qt,qt5,qvboxlayout,C++,Qt,Qt5,Qvboxlayout,我有一个继承QDialog的简单类,我动态添加元素 我的元素位于中间,但我想将它们添加到顶部 class CustomDialog : public QDialog { Q_OBJECT private: QVBoxLayout *mainLayout; CustomDialog() { mainLayout = new QVBoxLayout(); setLayout(mainLayout); } public: void update()
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);
}
};
我做错了什么?为什么我的动态添加元素总是在中心?我知道您想要放置它,并且顶部显示出来,这样您就可以使用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);
注意:使用不正确,因为第二个参数是stretch