持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第26天,点击查看活动详情
Qt中QScrollArea如果运用熟练它是一个神奇的控件。昨天有位初学者问我如何让显示文本多了出滚动条?文本少的时候又看不见滚动条呢?
今天我就来对这一功能做一个详细的说明,希望能帮助有需要的人。
首先,说实现效果:文本过多时,出现滚动条,文本较少时不出现滚动条。
那么,可以使用edit控件吗?
当前可以,前提是你最需要解决文本选中出现选中背景的问题,以及各种静态文本出现的问题。在这里,我不考虑使用edit控件,比较麻烦。
那么,我们来使用QScrollArea实现这个功能吧!
首先,看一下展示效果:
1:QtDesigner拖出控件
当从QtDesigner拖出一个QScrollArea控件时,大家会发现对象查看器中,自动在scrollArea生成一个叫做scrollAreaWidgetContents的控件。这是QScrollArea自身带的控件。
修改scrollAreaWidgetContents控件的宽度、高度时,大家会发现QScrollArea也会出现对应的滚动条。这说明,子控件默认是QScrollArea的大小,超过QScrollArea范围后就会出现相应的滚动条。
程序默认这两个控件是有绑定的。
在当前的功能中,是需要显示静态文本,那么,我们可以不可以将QLabel控件与QScrollArea控件做关联呢?
这样一来,修改QLabel控件高度,就相当于修改了QScrollArea内部子控件的高度,随之,也会出现QLabel控件高度变高,QScrollArea控件出现滚动条呢?
答案是正确的。
因此,再从QtDesigner中拖出一个QLabel控件,用于显示静态文本信息。
2:代码应用
系统自身QScrollArean会自带一个widget控件,那么新拖出来的控件该如何进行绑定呢?
这也是实现的核心:ui.scrollArea->setWidget(ui.label);
重新为QScrollArea控件绑定一个子控件,这样给QLabel设置文本时,就会自动出现滚动条了。
现在,要给label添加较多文本时,但是会发现界面与最现实的效果不一致
子控件QLabel并没有按照QScrollArea的宽度,这是为什么呢?
答:在QLabel控件中,默认无论你的控件宽度是多少,在没有设置自动换行功能时,控件都会默认查找显示文本是否有换行符?如果没有就会在这一行中一直显示,直到文本结尾。
由此,我们可以得出,想要高度自适应,宽度固定,需要设置QLabel控件属性,设置方式:
ui.label->setWordWrap(true);
这样在以后设置文本(label->setText)时才会与效果上展示的一致。
我是中国好公民st,一名C++开发程序猿~