2017-07-26 10 views
0

私はQDialogを継承するシンプルなクラスを持っていますが、私は動的要素 を追加し、私の要素は中央にありますが、それらを最上部に追加したいと思います。メインレイアウトのように使用するQVBoxLayoutでQt :: AlignTopが動作しないのはなぜですか?

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); 
    } 
}; 

enter image description here

それとも、それは逆の順序を持​​っているしたい場合は、第1の位置に挿入する必要があります。

mainLayout->insertLayout(0, verLayout); 

enter image description here

注:addLayoutの使用2番目のパラメータがstretchであるため、正しくありません。

関連する問題