Как правильно использовать QGridLayout для добавления виджетов рядом друг с другом в Qt5 - PullRequest
0 голосов
/ 15 июня 2019

У меня небольшая проблема при попытке поставить два макета рядом друг с другом.

Фактический результат, который я получил до сих пор, следующий:

layoutwrong

Но он должен выглядеть следующим образом:

layoutok

Чего мне не хватает?

Ниже небольшой фрагмент кода, который я использую для этого:

MyViz::MyViz(QWidget *parent) : QWidget(parent)
{

//  Qt Components set up......

QGridLayout* control_layout = new QGridLayout();
control_layout->addWidget(thickness_label, 0, 0);
control_layout->addWidget(thickness_slider, 0, 1);
control_layout->addWidget(cell_size_label, 1, 0);
control_layout->addWidget(cell_size_slider, 1, 1);

control_layout->addWidget(thickness_label_second_renderer, 0, 2);
control_layout->addWidget(thickness_slider_second_renderer, 0, 3);
control_layout->addWidget(cell_size_second_renderer_label, 1, 2);
control_layout->addWidget(cell_size_second_renderer_slider, 1, 3);


// construct lay-out and render panels next to each other
render_panel = new rviz::RenderPanel();
render_panel2 = new rviz::RenderPanel();

QVBoxLayout* main_layout = new QVBoxLayout;
main_layout->addLayout(control_layout);
main_layout->addWidget(render_panel);
main_layout->addWidget(render_panel2);

// set the top-leve layout for this MyViz widget
setLayout(main_layout);

// other operation....

}

1 Ответ

1 голос
/ 15 июня 2019

Проблема в том, что вы создаете QVBoxLayout ('V' для вертикали) и помещаете в него экземпляры QGridLayout и RenderPanel.Просто поместите все в QGridLayout ...

MyViz::MyViz(QWidget *parent) : QWidget(parent)
{

    //  Qt Components set up......

    QGridLayout* control_layout = new QGridLayout();
    control_layout->addWidget(thickness_label, 0, 0);
    control_layout->addWidget(thickness_slider, 0, 1);
    control_layout->addWidget(cell_size_label, 1, 0);
    control_layout->addWidget(cell_size_slider, 1, 1);

    control_layout->addWidget(thickness_label_second_renderer, 0, 2);
    control_layout->addWidget(thickness_slider_second_renderer, 0, 3);
    control_layout->addWidget(cell_size_second_renderer_label, 1, 2);
    control_layout->addWidget(cell_size_second_renderer_slider, 1, 3);


    // construct lay-out and render panels next to each other
    render_panel = new rviz::RenderPanel();
    render_panel2 = new rviz::RenderPanel();

    /*
     * At this point the QGridLayout has 4 occupied columns.  Make
     * each rviz::RenderPanel instance span 2 columns.
     */
    control_layout->addWidget(render_panel,  2, 0, 1, 2);
    control_layout->addWidget(render_panel2, 2, 2, 1, 2);

    // set the top-level layout for this MyViz widget
    setLayout(control_layout);

    // other operation....

}

Отметив, что 4-й и 5-й параметры, переданные в QGridLayout::addWidget, представляют собой диапазон строк и столбцов соответственно.

...