Important: Please read the Qt Code of Conduct -

Lines in Gridlayout are incorrectly positioned

  • Hi,
    I have the following code which supposed to create subsequent lines in a Dialog:

    	QWidget *mainWidget = new QWidget(this);
     QScrollArea *scroll = new QScrollArea(this);
            scroll->setVerticalScrollBarPolicy (Qt::ScrollBarAlwaysOn);
            scroll->setFixedSize (885,710);
            QWidget* viewport  = new QWidget(this);
            scroll->setWidget (viewport);
            scroll->setWidgetResizable (true);
           QLineEdit *lineedit1 = new QLineEdit;
           QLineEdit *lineedit2 = new QLineEdit;
           QLineEdit *lineedit3 = new QLineEdit;
           QLineEdit *lineedit4 = new QLineEdit;
           QLineEdit *lineedit5 = new QLineEdit;
           QLineEdit *lineedit6 = new QLineEdit;
           lineedit1->setText ("LineEdit1");
           lineedit2->setText ("LineEdit2");
           lineedit3->setText ("LineEdit3");
           lineedit4->setText ("LineEdit4");
           lineedit5->setText ("LineEdit5");
           lineedit6->setText ("LineEdit6");
           lineedit1->setMaximumWidth (100);
           lineedit2->setMaximumWidth (100);
           lineedit3->setMaximumWidth (100);
           lineedit4->setMaximumWidth (100);
           lineedit5->setMaximumWidth (100);
           lineedit6->setMaximumWidth (100);
      // Gridlayout
           QGridLayout *grid = new QGridLayout;
           grid->addWidget (lineedit1,0,0,Qt::AlignTop);
           grid->addWidget (lineedit2,0,1,Qt::AlignTop);
           grid->addWidget (lineedit3,0,2,Qt::AlignTop);
           grid->addWidget (lineedit4,0,3,Qt::AlignTop);
           grid->addWidget (lineedit5,1,0,Qt::AlignTop);
           grid->addWidget (lineedit6,1,1,Qt::AlignTop);
          scroll->setLayout (grid);
            int colcount = grid->columnCount ();
            qDebug() << "Column count: " << colcount;
            int rowcount = grid->rowCount ();
            qDebug() << "Row count: " << rowcount;
            int columnwidth = grid->columnMinimumWidth (0);
            qDebug() << "1st column width: " << columnwidth;
      // VBox Layout
            QVBoxLayout* mainLayout = new QVBoxLayout;
            mainWidget->show ();

    The code generates the following dialog:

    I'm wondering why is the second line on the bottom of the page? How can I get the widgets in the line closer to each other?
    Thank you for your help.

  • Lifetime Qt Champion


    There's one thing that's wrong, you should not put a layout on a QScrollArea but a widget. So the first thing to do is put your grid layout on a widget and then set that widget on the QScrollArea.

    IIRC the grid layout (as QVBoxLayout) will use by default the available space to layout the widget evenly

Log in to reply