【问题标题】:How to properly use QGridLayout to addWidgets next to each other in Qt5如何在Qt5中正确使用QGridLayout将Widgets彼此相邻添加
【发布时间】:2019-06-15 14:24:37
【问题描述】:

我在尝试将两个布局并排放置时遇到了一个小问题。

我目前的实际结果如下:

但它应该如下所示:

我错过了什么?

在我为此使用的小sn-p代码下方:

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....

}

【问题讨论】:

    标签: c++11 qt5 qgridlayout qvboxlayout


    【解决方案1】:

    问题是您正在创建一个QVBoxLayout(“V”表示垂直)并将您的QGridLayoutRenderPanel 实例放入其中。把所有东西都放在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....
    
    }
    

    注意传递给QGridLayout::addWidget的第4个和第5个参数分别是行和列跨度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-22
      • 2017-12-26
      • 1970-01-01
      • 2016-02-16
      • 1970-01-01
      • 1970-01-01
      • 2012-05-21
      • 1970-01-01
      相关资源
      最近更新 更多