Qt实现的流式布局,20行代码实现

在我们进行应用程序开发时,流式布局是很常见 的一种布局。Qt中自带的布局并没有实现流式布局,因此我们需要自己实现。写之前看了网上几篇流式布局的博客,感觉实现的比较麻烦,代码不够简洁,不太能满足博主的需要,于是决定自己实现,本篇博客中实现的流式布局应该是全网代码量最少的流式布局了,代码比较简单,但是效果还是不错的。
博主在项目中实现的效果如下图所示:
fdfafaf
在这里插入图片描述

思路比较简单:
利用栅格布局和scrollArea,子窗体放在栅格布局中,将栅格布局放入scrollArea,每当窗体大小改变时,重新计算scrollArea每行能放几个子窗体,然后利用addWidget()对栅格布局中的子窗体进行重新排列即可。

代码如下:

template <typename  equ_type>
void UIDemo01::set_flow_layout(int width,int height,int equ_width,QList<equ_type*> equ_list,QGridLayout *gri_lay)
{

    int col_cnt=width/equ_width;
    int row_cnt=0;
    if(!col_cnt) return;
    if(!equ_list.size()) return; //当前无设备 return
    int MAX_HEIGHT=320;
    int min_row=height/MAX_HEIGHT+1;
    //如果有余数就加一,没余数就直接等于除的结果
    if(equ_list.size()%col_cnt)
        row_cnt=equ_list.size()/col_cnt+1;
    else  row_cnt=equ_list.size()/col_cnt;
    if(row_cnt<min_row) row_cnt=min_row;
    for(int i=0;i<row_cnt;i++)
    {
        for(int j=0;j<col_cnt;j++)
        {
            if(col_cnt*i+j<equ_list.size())
                gri_lay->addWidget(equ_list.at(col_cnt*i+j),i,j,Qt::AlignLeft | Qt::AlignTop);
        }
        //gri_lay->setColumnStretch(i,1);
    }

}
//窗体大小改变发出的事件
void UIDemo01::resizeEvent(QResizeEvent *event)
{
    this->set_flow_layout(ui->scrollArea->width(),ui->scrollArea->height(),EQU_WIDTH,equ_list,gri_lay);
}

其中QList<equ_type*> equ_list是存放子窗体的容器,EQU_WIDTH为子窗口的宽度大小。

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值