Qt FlowLayout升级版

Qt FlowLayout升级版

@[toc]

简述

最近因为工作需要,在flowlayout流布局上改进了下。专业词语不知道怎么称呼,暂且称为紧凑型布局吧。看看效果图

效果图

1.gif

核心代码

int itemSize = itemList.size();
    for (int i = 0; i < itemSize; i++) {
        QWidget *wid = itemList[i]->widget();
        int spaceX = horizontalSpacing();
        if (spaceX == -1)
            spaceX = wid->style()->layoutSpacing(
                QSizePolicy::PushButton, QSizePolicy::PushButton, Qt::Horizontal);
        int spaceY = verticalSpacing();
        if (spaceY == -1)
            spaceY = wid->style()->layoutSpacing(
                QSizePolicy::PushButton, QSizePolicy::PushButton, Qt::Vertical);
//! [10]
//! [11]
//!

        if(itemList[i]->sizeHint().height() == 0) continue;
        int nextX = x + itemList[i]->sizeHint().width() + spaceX;
        int nextY = y;
        if(x > effectiveRect.x()){
            nextX = x;
            nextY = y + itemList[i]->sizeHint().height() + spaceY;

            if(nextY - spaceY >= preY + lineHeight && lineHeight > 0 && lineWidth > 0){
                x = x + lineWidth + spaceX;
                y = preY;
                nextX = x;
                nextY = y + itemList[i]->sizeHint().height() + spaceY;
                lineWidth = 0;
            }
            lineWidth = qMax(lineWidth, itemList[i]->sizeHint().width());
        }

        if (nextX + itemList[i]->sizeHint().width() > effectiveRect.right() && lineHeight > 0) {
            x = effectiveRect.x();
            y = preY + lineHeight + spaceY;
            preY = y;
            nextX = x + itemList[i]->sizeHint().width() + spaceX;
            nextY = y;
            lineHeight = 0;
            lineWidth = 0;
        }

        if (!testOnly)
        {
            itemList[i]->setGeometry(QRect(QPoint(x, y), itemList[i]->sizeHint()));
        }
        
        lineHeight = qMax(lineHeight, itemList[i]->sizeHint().height());
        x = nextX;
        y = nextY;
    }

QQ群

Qt交流大会 853086607 (收费群,用于后期升级群费用)


在这里插入图片描述

结尾

不定期上传新作品,解答群中作品相关问题。相关外,能解答则解答。欢迎大家一起探索Qt世界!相关工程,可以联系博主雨田哥:3246214072

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Qt定制化安装包工具 1.1.0.0版本 @[toc] 简述 上篇推出了1.0.0.0版本1.1.0.0版本增加功...
    雨田哥工作号阅读 541评论 0 1
  • Qt任务策略控件 @[toc] 简述 一网友,让帮忙弄的任务策略控件,其实我也不知道该怎么称呼这个控件。 功能 1...
    雨田哥工作号阅读 291评论 0 0
  • Qt雨田哥的斗图神器 @[toc] 简述 寒山-居士 https://blog.csdn.net/Esonpo最近...
    雨田哥工作号阅读 434评论 0 0
  • 老家的小狗,点点,是个很聪明的小东西。昨天一出门,发现它和另外一只小狗在玩,但它们的玩法很特别,一个躺着,一个推着...
    Annie大讲堂阅读 138评论 0 0
  • 林晓背上背包,顺手从抽屉里拿出手机,边走边点亮屏幕。 吴姐笑道:“晓晓,你真是个实诚的好孩子,上班几年了,还是把手...
    涓涓清流_00阅读 726评论 15 26