2020-10-07

因工作原因从来没有用过Qt的我最近也接触了一下Qt,在使用QScrollArea的时候发现UI添加进QScrollArea无法滑动,在网上找了很多教程也没发现一个编程新手,能给新手讲明白的教程。无奈之下只好自己琢磨,下面给大家分享下我使用QScrollArea的过程及其Demo。

    两种方法:

        1.直接从设计中生成的QScrollArea(为什么从这个方法开始讲是因为对新手来说容易理解一点。理解了这个直接用代码写应该也能理解的。)

           ①首先从设计中生成一个QScrollArea。

           

            ②添加UI(之前我一直单纯的以为UI直接加入QScrollArea里面就行了,如果UI设置的坐标超过QScrollArea的大小QScrollArea就直接能滚动,结果发现不行,最后研究了一下午才弄懂为什么)

            

            一直纳闷为什么不能滚动,网上各种找资料,感觉网上大部分资料不是针对小白写的,最后发现在设计中生成QScrollArea的时候自动送了一个Widget作为ScrollArea的子widget。而想要滚动画面,就一定要这个widget比QScrollArea的size大的时候才可以,而且滚动的画面也是这个widget。(QScrollArea就像是一扇窗户,widget就像一块画布,画布比窗户大的时候,通过窗户只能看到画布的一部分,画布不断地滚动你就能看到画布的其他内容)所以,一定要把UI放进这个widget,并且最后要设置Widget的大小。

              ③最后要设置QScrollArea的一个属性widgetResizable,这个属性用代码生成的时候默认是false,而用设计生成默认是true,找到它把它设置成false。

               

              这里在设计中创建是默认勾选的,去掉√,最后运行就ok了。

        2.用代码实现QScrollArea(大家看懂了上面的内容的话,下面的就大同小异了,直接给大家贴代码)

结合代码加注释,相信大家能看懂的。然后在这里给大家解释下widget设置size的问题。

如果你widget设置的widget和QScrollArea一样大会出现这种情况

        

当你右边的ScrollBar出现的时候占用了一些宽度,导致QScrollArea的widget相对的来说变小了(不是变小了,只是这样解释给大家听)。这样的情况下,widget的宽度就是大于QScrollArea的宽度的,这样下面的ScrollBar也会出现。所以一般widget会设置比QScrollArea的宽度小一点点,具体小多少我没去研究,大家自己看看吧。

        然后给大家贴一张正常运行的截图。

           

(此教程针对小白,所以会相对比较繁杂,大神轻踩。然后这是我自己对QScrollArea的理解,不一定完全正确,仅供参考!)

QScrollArea *scrollArea=new QScrollArea(this);  //创建一个Scroll Area的对象指针
    scrollArea->setGeometry(10,10,300,300);         //设置位置以及大小
    QWidget *contentWidget=new QWidget();           //创建一个widegt(也就是在设计界面中跟随Scroll Area自动生成的widget)
    scrollArea->setWidget(contentWidget);           //将两者关联
    for(int i1=0;i1<4;i1++)                         //循环创建label放到widget上,而不是放到Scroll Area上
    {
        QLabel *la=new QLabel(contentWidget);
        la->setGeometry(10,i1*30+10,300,10);
        la->setText(array[i1]);
        contentWidget->setGeometry(0,0,scrollArea->width()-20,i1*30+40);
    }
    scrollArea->show();

转载自https://blog.csdn.net/imc980925/article/details/80363707

版权声明:本文原博主的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

 

最后需要加一句show(),不然会不显示。

其中的array[]是自己提前定义的数组,

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值