QML ScrollView内嵌长富文本无法滚动至底部问题咨询
问题原因
- 核心问题是你手动为ScrollView指定了
contentWidth和contentHeight,Qt Quick Controls 2的ScrollView本身会自动根据子元素的隐式尺寸计算内容区域大小,手动赋值会触发绑定时序问题:使用RichText的Text组件需要在宽度确定后才会计算最终渲染高度,手动绑定的contentHeight会取到Text未完成换行计算的初始高度值,导致实际内容高度比记录的contentHeight大,滚动到预设的contentHeight底部时还有内容被截断。 - 次要问题是你打印的contentHeight是绑定的初始计算值,并非Text完成渲染后的真实高度,才会出现contentHeight大于height但依旧滚动不彻底的情况。
修复方案
直接删除ScrollView中手动设置的contentWidth、contentHeight属性即可解决滚动不到底的问题,这两个属性不需要手动赋值,ScrollView会自动监听子元素尺寸变化更新内容区域参数。
修正后完整代码
import QtQuick 2.14 import QtQuick.Controls 2.14 Item { anchors.fill: parent Rectangle { anchors.centerIn: parent width: 800 height: 600 color: "lightgrey" ScrollView { anchors.fill: parent clip: true ScrollBar.vertical.policy: contentHeight > height ? ScrollBar.AlwaysOn : ScrollBar.AlwaysOff Text { id: descriptionText width: parent.width - 5 textFormat: Text.RichText wrapMode: Text.WordWrap font.pointSize: 12 text: `<p> Liberis velum, tanquam brevis mineralis. Domesticus tumultumque acceleratrix imperiums gluten est. Heu, brevis cannabis! Nunquam locus cursus. Eheu, magnum zirbus! Rector pius acipenser est. Devirginatos credere, tanquam noster tabes. Fortis amors ducunt ad finis. Ubi est domesticus vita? Mirabilis frondators ducunt ad hibrida. Medicina, gabalium, et absolutio. Historia noceres, tanquam peritus decor. Mortems velum, tanquam flavum zirbus. Studere una ducunt ad dexter nutrix. Cum mineralis cadunt, omnes absolutioes contactus superbus, secundus exemplares. Ubi est castus racana? Pol, a bene fermium, magnum lanista!Acipensers messis! </p> <ul> <li>Fatalis verpas ducunt ad racana.</li> <li>Ubi est regius exsul?</li> <li>Noster contencio aegre imitaris amor est.</li> <li>Ubi est secundus omnia?</li> <li>Parmas sunt resistentias de regius uria.</li> <li>Fidelis, festus brodiums tandem talem de flavum, domesticus quadra.</li> </ul> <p> Bursa noceres, tanquam flavum nixus. Gratis sectams ducunt ad zelus. Pol, idoleum! Cum quadra cadunt, omnes exsules anhelare azureus, castus orgiaes. Sunt valebates consumere varius, brevis caculaes. Canis velox fides est. Nunquam imitari nomen. Cur onus favere? Festus xiphiass ducunt ad index. Heuretes tolerares, tanquam teres sensorem. Cur buxum velum? Rusticus castors ducunt ad plasmator. Ubi est magnum brabeuta? Calcaria de bassus liberi, gratia imber! Primus lapsus mechanice tractares zelus est. A falsis, turpis nobilis fides. A falsis, era barbatus abactus. Heu, rusticus bromium! Spatiis observare in antenna! Est fatalis extum, cesaris. Nunquam captis nomen. Tatas nocere! Sunt nutrixes demitto regius, lotus dominaes. Assimilatios sunt vigils de clemens glos. Est castus clabulare, cesaris. </p> <p> Assimilatio de neuter fuga, gratia animalis! Cum lactea observare, omnes indictioes examinare azureus, germanus nixes. Ubi est grandis ausus? Clemens, fidelis rationes sapienter visum de domesticus, peritus itineris tramitem. Detrius de emeritis mens, demitto spatii! Dexter, ferox brabeutas satis dignus de mirabilis, fidelis particula. Cur exsul manducare? Sunt compateres pugna velox, raptus planetaes. Cum adelphis experimentum, omnes eraes aperto azureus, gratis verpaes. Cum rumor ridetis, omnes brodiumes captis peritus, albus galataees. </p> <p> Galataes resistere! Audax, emeritis frondators grauiter reperire de lotus, barbatus ionicis tormento. Capio de varius bubo, acquirere fluctus! Salvus, raptus imbers sed mire manifestum de germanus, superbus racana. Cum itineris tramitem nocere, omnes peses demitto pius, talis detriuses! </p> <p> Toruss sunt nuclear vexatum iaceres de festus fermium. </p>` } } } }
内容的提问来源于stack exchange,提问作者Jhonny007
相关产品推荐
相关产品推荐

