Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么Qt::AlignTop不';我在QVBoxLayout中不能像主布局那样工作吗?_C++_Qt_Qt5_Qvboxlayout - Fatal编程技术网

C++ 为什么Qt::AlignTop不';我在QVBoxLayout中不能像主布局那样工作吗?

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()

我有一个继承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);
    }
};

我做错了什么?为什么我的动态添加元素总是在中心?

我知道您想要放置它,并且顶部显示出来,这样您就可以使用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