• QScrollArea样式


            简介

            QScrollBar垂直滚动条分为sub-line、add-line、add-page、sub-page、up-arrow、down-arrow和handle几个部分。
            QScrollBar水平滚动条分为sub-line、add-line、add-page、sub-page、left-arrow、right-arrow和handle几个部分。

    部件如下图所示:

     样式详细说明

    1. /* 整个滚动条区域样式 */
    2. QScrollBar:vertical {
    3. border: 2px solid grey;
    4. background: #32CC99;
    5. width: 30px;
    6. /* 滑块活动区域间距,这个间距如果小于add-line和sub-line的高度或宽度滚动滑块将会覆盖add-line和sub-line,所以可以通过margin: 0px 0 0px 0;来隐藏滚动条两头区域*/
    7. margin: 32px 0 32px 0;
    8. }
    9. /* 滑块区域样式 */
    10. QScrollBar::handle:vertical {
    11. background: rgb(250, 3, 3);
    12. border: 2px solid rgb(8, 8, 8);
    13. border-radius: 10px;
    14. /*无效,宽度由QScrollBar width控制*/
    15. width: 10px;
    16. /*可以通过margin设置滑块小于QScrollBar width,再鼠标滑过滑块样式中再重新设置margin,达到鼠标滑过滑块变大的效果,但是圆角设置border-radius不生效了!!!*/
    17. margin: 0 5px 0 5px;
    18. min-height: 50px;
    19. /*max-height无效!!!*/
    20. max-height: 50px;
    21. }
    22. /* 鼠标滑过滑块样式 */
    23. QScrollBar::handle:vertical:hover,
    24. QScrollBar::handle:vertical:pressed {
    25. border-radius: 10px;
    26. margin: 0 1px 0 1px;
    27. background: rgb(221, 81, 17);
    28. }
    29. /* 向上区域样式 */
    30. QScrollBar::sub-line:vertical {
    31. border: 2px solid rgb(18, 208, 221);
    32. background: #0c5a20;
    33. height: 30px;
    34. subcontrol-position: top;
    35. subcontrol-origin: margin;
    36. }
    37. /* 向下区域样式 */
    38. QScrollBar::add-line:vertical {
    39. border: 2px solid rgb(68, 218, 31);
    40. background: #123026;
    41. height: 30px;
    42. subcontrol-position: bottom;
    43. subcontrol-origin: margin;
    44. }
    45. /* 向上箭头样式 */
    46. QScrollBar::up-arrow:vertical {
    47. border-image:url(:/scrollarea/resources/image/scrollarea/arrowup.png);
    48. border: 2px solid rgb(22, 12, 68);
    49. width: 20;
    50. height: 20;
    51. background: rgb(130, 141, 165);
    52. }
    53. /* 向下箭头样式 */
    54. QScrollBar::down-arrow:vertical {
    55. border-image:url(:/scrollarea/resources/image/scrollarea/arrowdown.png);
    56. border: 2px solid rgb(223, 104, 104);
    57. width: 20;
    58. height: 20;
    59. background: rgb(233, 159, 177);
    60. }
    61. /* 当鼠标放到向上区域的时候 */
    62. QScrollBar::sub-line:vertical:hover {}
    63. /* 当鼠标放到向下区域的时候 */
    64. QScrollBar::add-line:vertical:hover {}
    65. /* 当鼠标放到向上箭头上的时候 */
    66. QScrollBar::up-arrow:vertical:hover {
    67. /* height:9px;width:8px; */
    68. /* border-image:url(:/images/a/2.png); */
    69. subcontrol-position: top;
    70. }
    71. /* 当鼠标放到向下箭头上的时候 */
    72. QScrollBar::down-arrow:vertical:hover {
    73. /* height:9px;width:8px; */
    74. /* border-image:url(:/images/a/4.png); */
    75. subcontrol-position: bottom;
    76. }
    77. /* 滑块上面区域样式 */
    78. QScrollBar::sub-page:vertical {
    79. background: rgb(117, 196, 13);
    80. border: 2px solid rgb(223, 104, 104);
    81. }
    82. /* 滑块下面区域样式 */
    83. QScrollBar::add-page:vertical {
    84. background: rgba(255, 102, 11);
    85. border: 2px solid rgb(223, 104, 104);
    86. }
    87. /* ############################################ */
    88. /* 整个滚动条区域样式 */
    89. QScrollBar:horizontal {
    90. border: 2px solid grey;
    91. background: #32CC99;
    92. height: 30px;
    93. /* 滑块活动区域间距,这个间距如果小于add-line和sub-line的高度或宽度滚动滑块将会覆盖add-line和sub-line,所以可以通过margin: 0px 0 0px 0;来隐藏滚动条两头区域*/
    94. margin: 0 32px 0 32px;
    95. }
    96. /* 滑块区域样式 */
    97. QScrollBar::handle:horizontal {
    98. background: rgb(250, 3, 3);
    99. border: 2px solid rgb(8, 8, 8);
    100. /*无效,高度由QScrollBar height控制*/
    101. height: 10px;
    102. /*可以通过margin设置滑块小于QScrollBar height,再鼠标滑过滑块样式中再重新设置margin,达到鼠标滑过滑块变大的效果*/
    103. margin: 5px 0 5px 0;
    104. min-width: 50px;
    105. /*max-width无效!!!*/
    106. max-width: 50px;
    107. }
    108. /* 鼠标滑过滑块样式 */
    109. QScrollBar::handle:horizontal:hover,
    110. QScrollBar::handle:horizontal:pressed {
    111. margin: 0 1px 0 1px;
    112. background: rgb(221, 81, 17);
    113. }
    114. /* 向左区域样式 */
    115. QScrollBar::sub-line:horizontal {
    116. border: 2px solid rgb(18, 208, 221);
    117. background: #0c5a20;
    118. width: 30px;
    119. /*sub-line:horizontal要设置height但是sub-line:vertical却不要设置width!!!*/
    120. height: 20px;
    121. subcontrol-position: left;
    122. subcontrol-origin: margin;
    123. }
    124. /* 向右区域样式 */
    125. QScrollBar::add-line:horizontal {
    126. border: 2px solid rgb(68, 218, 31);
    127. background: #123026;
    128. width: 30px;
    129. height: 20px;
    130. subcontrol-position: right;
    131. subcontrol-origin: margin;
    132. }
    133. /* 向左箭头样式 */
    134. QScrollBar::left-arrow:horizontal {
    135. border-image:url(:/scrollarea/resources/image/scrollarea/arrow-left.png);
    136. border: 2px solid rgb(22, 12, 68);
    137. width: 20;
    138. height: 20;
    139. background: rgb(130, 141, 165);
    140. }
    141. /* 向右箭头样式 */
    142. QScrollBar::right-arrow:horizontal {
    143. border-image:url(:/scrollarea/resources/image/scrollarea/arrowright.png);
    144. border: 2px solid rgb(223, 104, 104);
    145. width: 20;
    146. height: 20;
    147. background: rgb(233, 159, 177);
    148. }
    149. /* 当鼠标放到向左区域的时候 */
    150. QScrollBar::sub-line:horizontal:hover {}
    151. /* 当鼠标放到向右区域的时候 */
    152. QScrollBar::add-line:horizontal:hover {}
    153. /* 当鼠标放到向左箭头上的时候 */
    154. QScrollBar::left-arrow:horizontal:hover {
    155. /* height:9px;width:8px; */
    156. /* border-image:url(:/images/a/2.png); */
    157. subcontrol-position: top;
    158. }
    159. /* 当鼠标放到向右箭头上的时候 */
    160. QScrollBar::right-arrow:horizontal:hover {
    161. /* height:9px;width:8px; */
    162. /* border-image:url(:/images/a/4.png); */
    163. subcontrol-position: bottom;
    164. }
    165. /* 滑块左面区域样式 */
    166. QScrollBar::sub-page:horizontal {
    167. background: rgb(117, 196, 13);
    168. border: 2px solid rgb(223, 104, 104);
    169. }
    170. /* 滑块右面区域样式 */
    171. QScrollBar::add-page:horizontal {
    172. background: rgba(255, 102, 11);
    173. border: 2px solid rgb(223, 104, 104);
    174. }
    175. QScrollArea qss样式美化
    176. /* QScrollArea {
    177. border: none;
    178. background: none;
    179. } */
    180. /* 整个垂直滚动条区域样式 */
    181. QScrollBar:vertical {
    182. border: none;
    183. background: rgb(30, 30, 30);
    184. width: 10px;
    185. margin: 0px 0 0px 0;
    186. }
    187. /* 整个水平滚动条区域样式 */
    188. QScrollBar:horizontal {
    189. border: none;
    190. background: rgb(30, 30, 30);
    191. height: 10px;
    192. margin: 0px 0 0px 0;
    193. }
    194. /* 滑块区域样式 */
    195. QScrollBar::handle:vertical {
    196. background: rgb(66, 66, 66);
    197. min-height: 20px;
    198. border-radius: 5px;
    199. border: none;
    200. /* margin: 0 1px 0 1px; */
    201. }
    202. QScrollBar::handle:horizontal {
    203. background: rgb(66, 66, 66);
    204. min-height: 20px;
    205. border-radius: 5px;
    206. border: none;
    207. }
    208. /* 鼠标滑过滑块样式 */
    209. QScrollBar::handle:vertical:hover,
    210. QScrollBar::handle:vertical:pressed {
    211. background: rgb(79, 79, 79);
    212. /* margin: 0 0 0 0; */
    213. }
    214. QScrollBar::handle:horizontal:hover,
    215. QScrollBar::handle:horizontal:pressed {
    216. background: rgb(79, 79, 79);
    217. }
    218. /* 向下箭头样式 */
    219. QScrollBar::add-line:vertical {
    220. border: none;
    221. background: none;
    222. height: 0px;
    223. subcontrol-position: bottom;
    224. subcontrol-origin: margin;
    225. }
    226. /* 向右箭头样式 */
    227. QScrollBar::add-line:horizontal {
    228. border: none;
    229. background: none;
    230. height: 0px;
    231. subcontrol-position: bottom;
    232. subcontrol-origin: margin;
    233. }
    234. /* 向上箭头样式 */
    235. QScrollBar::sub-line:vertical {
    236. border: none;
    237. background: none;
    238. height: 0px;
    239. subcontrol-position: top;
    240. subcontrol-origin: margin;
    241. }
    242. /* 向左箭头样式 */
    243. QScrollBar::sub-line:horizontal {
    244. border: none;
    245. background: none;
    246. height: 0px;
    247. subcontrol-position: top;
    248. subcontrol-origin: margin;
    249. }
    250. /* 滚动条上面和下面区域样式 */
    251. QScrollBar::sub-page:vertical,
    252. QScrollBar::add-page:vertical {
    253. background: none;
    254. width: 0px;
    255. height: 0px;
    256. }
    257. /* 滚动条左面和右面区域样式 */
    258. QScrollBar::sub-page:horizontal,
    259. QScrollBar::add-page:horizontal {
    260. background: none;
    261. width: 0px;
    262. height: 0px;
    263. }
    264. 重写QScrollArea实现QScrollArea获得焦点时qscrollbar才显示,使用时将QScrollArea提升为自定义的QScrollArea。
    265. #pragma once
    266. #include <QtWidgets>
    267. class MyQScrollArea : public QScrollArea
    268. {
    269. Q_OBJECT
    270. private:
    271. protected:
    272. void enterEvent(QEvent *event) override;
    273. void leaveEvent(QEvent *event) override;
    274. public:
    275. MyQScrollArea(QWidget *parent = nullptr);
    276. ~MyQScrollArea();
    277. };
    278. #include "myqscrollarea.h"
    279. MyQScrollArea::MyQScrollArea(QWidget *parent) : QScrollArea(parent)
    280. {
    281. // setMouseTracking(true);
    282. verticalScrollBar()->hide();
    283. horizontalScrollBar()->hide();
    284. }
    285. MyQScrollArea::~MyQScrollArea()
    286. {
    287. }
    288. void MyQScrollArea::enterEvent(QEvent *event)
    289. {
    290. verticalScrollBar()->show();
    291. horizontalScrollBar()->show();
    292. QAbstractScrollArea::enterEvent(event);
    293. }
    294. void MyQScrollArea::leaveEvent(QEvent *event)
    295. {
    296. verticalScrollBar()->hide();
    297. horizontalScrollBar()->hide();
    298. QAbstractScrollArea::leaveEvent(event);
    299. }

    实例

    1. QString _scrollStyle =
    2. //水平样式--宽度设置为0:为了隐藏
    3. "QScrollArea{border:none;background-color:transparent;}"
    4. "QScrollArea QScrollBar:horizontal{width:0px;background:transparent;margin:0px,1px,0px,1px;padding-top:0px;padding-bottom:0px;border-radius:2px;}"
    5. "QScrollArea QScrollBar::handle:horizontal{background:#00ffff;border-radius:2px;}"
    6. "QScrollArea QScrollBar::handle:horizontal:hover{background:#47d5d5;border-radius:2px;}"
    7. "QScrollArea QScrollBar::add-page:horizontal,QScrollBar::sub-page:horizontal{background:transparent;border-radius:2px;}"
    8. "QScrollArea QScrollBar::add-line:horizontal,QScrollBar::sub-line:horizontal{height:0px;width:0px;}"
    9. //垂直样式
    10. "QScrollArea QScrollBar:vertical{width:8px;background:transparent;margin:0px,1px,0px,1px;padding-top:0px;padding-bottom:0px;border-radius:2px;}"
    11. "QScrollArea QScrollBar::handle:vertical{width:8px;background:rgb(230,230,230);border-radius:4px;}"
    12. "QScrollArea QScrollBar::handle:vertical:hover{background:rgba(69, 178, 255,90%);border-radius:4px;}"
    13. "QScrollArea QScrollBar::add-page:vertical,QScrollBar::sub-page:vertical{background:transparent;border-radius:2px;}"
    14. "QScrollArea QScrollBar::add-line:vertical,QScrollBar::sub-line:vertical{height:0px;width:0px;}";
    15. videoToolArea->setStyleSheet(_scrollStyle);

    鼠标离开时:

    鼠标在上面时:

     

  • 相关阅读:
    SPL工业智能:发现时序数据的异常
    国内MES系统应用研究报告 | MES系统如何选型?
    4--OpenCV:图像像素的读写&像素运算
    【数据库07】后端开发必备的大数据知识指南
    小样本分割:构建数据集Pascal-5i
    备战数学建模32-相关性分析2
    Keepalived+Nginx高可用集群
    ubuntu 命令行 上的一些常见的快捷键和命令
    Linux学习-59-备份还原数据命令(dump、restore、dd命令)
    北理工嵩天Python语言程序设计笔记(5 程序的控制结构)
  • 原文地址:https://blog.csdn.net/hulinhulin/article/details/133574578