如何在可折叠面板上实现大小相等的FormLayout?

时间:2013-11-28 10:41:36

标签: qt layout qt4

我认为这可能是两个分开的问题。在Qt4.8中,QFormLayout

  

QFormLayout类管理输入窗口小部件及其相关标签的形式。

     

QFormLayout是一个便利的布局类,它以两列的形式布置其子元素。左列由标签组成,右列由“字段”小部件组成(行编辑器,旋转框等)。

以下图为指导,

1)如何创建两个可折叠的面板,可以相应折叠?就像两个蓝色矩形?我尝试了QGroupBox,但其中没有任何可折叠的属性。

2)如何使两个分开​​的QFormLayout具有相同的标签和字段比例,即使它们属于不同的可折叠面板?如附图所示,我们可以告诉这两个formlayouts是否对齐,如绿线所示。

enter image description here

1 个答案:

答案 0 :(得分:0)

我希望您拥有可折叠的代码,并且只需要QFormLayout的代码。我相信这应该可以解决问题。

标题文件:

#pragma once

#include <QtGui>
#include <QtCore>

class newQtApp : public QMainWindow {
    Q_OBJECT

    public :
        newQtApp();
};

来源

newQtApp::newQtApp() : QMainWindow() {

    cout << "Im being initialized...." << endl;
    cout << "Setting window properties..." << endl;

    QFormLayout *fLyt1 = new QFormLayout();
    fLyt1->setLabelAlignment( Qt::AlignRight );
    for( int i = 0; i < 5; i++ ) {
        QLabel *lbl = new QLabel( QString( "Lyt 1, Label %1:" ).arg( i + 1), this );
        lbl->setFixedWidth( 150 );
        lbl->setAlignment( Qt::AlignRight );

        fLyt1->addRow( lbl, new QLineEdit() );
    }

    QGroupBox *w1 = new QGroupBox( "First Collapsible", this );
    w1->setLayout( fLyt1 );

    QFormLayout *fLyt2 = new QFormLayout();
    fLyt2->setLabelAlignment( Qt::AlignRight );
    for( int i = 0; i < 5; i++ ) {
        QLabel *lbl = new QLabel( QString( "Second Layout, Label %1:" ).arg( i + 1), this );
        lbl->setFixedWidth( 150 );
        lbl->setAlignment( Qt::AlignRight );

        fLyt2->addRow( lbl, new QCheckBox( "Check this out!!" ) );
    }

    QGroupBox *w2 = new QGroupBox( "Second Collapsible", this );
    w2->setLayout( fLyt2 );

    QVBoxLayout *baseLyt = new QVBoxLayout();
    baseLyt->addWidget( w1 );
    baseLyt->addWidget( w2 );

    QWidget *base = new QWidget( this );
    base->setLayout( baseLyt );

    setCentralWidget( base );
};

以下是截图: enter image description here