如何在样式化后使滚动条句柄可点击?
How To Make Scrollbar Handle Clickable After Styling?
我正在为客户端制作一个 GUI,我正在使用 Qt Python 3.6(PySide2,而不是 PyQt)。我有一个 QTableWidget 读取一堆数据,这使得滚动条出现。我的客户想要自定义 GUI 样式,所以我一直在使用 Qt 的 setStyleSheet()
函数。
我 运行 遇到以下问题:在滚动条上设置样式以移除箭头按钮会调整手柄的大小(正如您所期望的那样)并允许它在箭头按钮所在的区域上方移动以前是。但是,如果我的鼠标在那些区域,我无法点击滚动条。
绿色圆圈是箭头按钮通常所在的位置,红色条是我的滚动条手柄。如果我的鼠标在绿色圆圈内,我就不能点击滚动条的手柄。如果滚动条变得小于按钮大小,这将成为一个大问题,这意味着我必须使用滚轮将其移出该区域才能单击它。虽然我可以通过将句柄设置为最小 height/width 来解决该问题,但当您无法单击滚动条的某些区域时,这也是一种非常糟糕的用户体验...
这是我的风格sheet:
* {
color:white;
}
QWidget {
background-color:#333;
}
QGroupBox, QGroupBox QLabel {
background-color:#4c4c4c;
}
QLineEdit {
background-color:white;
color:black;
}
QComboBox, QPushButton {
background-color:maroon;
}
QToolTip {
border:3px solid maroon;
padding:5px;
font-size:16px;
background-color:#333;
}
QTableWidget {
color:black;
background-color:white;
alternate-background-color:#ffd6d6;
gridline-color:#4c4c4c;
selection-background-color:maroon;
}
QHeaderView::section {
padding:3px;
text-align:center;
}
QScrollBar::handle {
background-color:maroon;
border-radius:6px;
border: 2px solid #d10000;
min-width:25px;
min-height:25px;
}
QScrollBar::left-arrow:horizontal, QScrollBar::right-arrow:horizontal,
QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal {
border: none;
background: none;
color: none;
}
QScrollBar::add-line, QScrollBar::sub-line {
border:none;
background-color:none;
}
我对使用 Qt 风格还很陌生 sheets,所以我想知道我是否遗漏了什么。我设法找到的大多数答案只说要做我在最后 3 种风格中已经做过的事情。有谁知道可能是什么问题?
搁置了大约一个星期后,我终于不得不坐下来解决这个问题。
对于那些有同样问题但也在为这个问题的答案摸不着头脑的人:Hide QScrollBar arrows,我发现了一个非常明显的解决方法,现在我正在考虑它。
虽然下面的样式 sheet 实际上 隐藏了 箭头按钮,但它并没有 删除 它们。这在实践中很明显,因为经过进一步测试,单击这些区域仍然会移动手柄,就像我单击箭头按钮一样。
QScrollBar::left-arrow:horizontal, QScrollBar::right-arrow:horizontal,
QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal {
border: none;
background: none;
color: none;
}
QScrollBar::add-line, QScrollBar::sub-line {
border:none;
background-color:none;
}
解决方案非常简单:箭头按钮似乎与滚动条的其余部分不共享样式(因为滚动条被分成子样式)。这意味着,将箭头按钮的 width
和 height
属性设置为 0px
之类的操作将使您 可以 单击手柄。
注意:为了更好的衡量,我还将 add-line
和 sub-line
属性设置为 0px
.
QScrollBar::left-arrow:horizontal, QScrollBar::right-arrow:horizontal,
QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal {
border: none;
background: none;
color: none;
width: 0px;
height: 0px;
}
QScrollBar::add-line, QScrollBar::sub-line {
border:none;
background-color:none;
width: 0px;
height: 0px;
}
我正在为客户端制作一个 GUI,我正在使用 Qt Python 3.6(PySide2,而不是 PyQt)。我有一个 QTableWidget 读取一堆数据,这使得滚动条出现。我的客户想要自定义 GUI 样式,所以我一直在使用 Qt 的 setStyleSheet()
函数。
我 运行 遇到以下问题:在滚动条上设置样式以移除箭头按钮会调整手柄的大小(正如您所期望的那样)并允许它在箭头按钮所在的区域上方移动以前是。但是,如果我的鼠标在那些区域,我无法点击滚动条。
绿色圆圈是箭头按钮通常所在的位置,红色条是我的滚动条手柄。如果我的鼠标在绿色圆圈内,我就不能点击滚动条的手柄。如果滚动条变得小于按钮大小,这将成为一个大问题,这意味着我必须使用滚轮将其移出该区域才能单击它。虽然我可以通过将句柄设置为最小 height/width 来解决该问题,但当您无法单击滚动条的某些区域时,这也是一种非常糟糕的用户体验...
这是我的风格sheet:
* {
color:white;
}
QWidget {
background-color:#333;
}
QGroupBox, QGroupBox QLabel {
background-color:#4c4c4c;
}
QLineEdit {
background-color:white;
color:black;
}
QComboBox, QPushButton {
background-color:maroon;
}
QToolTip {
border:3px solid maroon;
padding:5px;
font-size:16px;
background-color:#333;
}
QTableWidget {
color:black;
background-color:white;
alternate-background-color:#ffd6d6;
gridline-color:#4c4c4c;
selection-background-color:maroon;
}
QHeaderView::section {
padding:3px;
text-align:center;
}
QScrollBar::handle {
background-color:maroon;
border-radius:6px;
border: 2px solid #d10000;
min-width:25px;
min-height:25px;
}
QScrollBar::left-arrow:horizontal, QScrollBar::right-arrow:horizontal,
QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal {
border: none;
background: none;
color: none;
}
QScrollBar::add-line, QScrollBar::sub-line {
border:none;
background-color:none;
}
我对使用 Qt 风格还很陌生 sheets,所以我想知道我是否遗漏了什么。我设法找到的大多数答案只说要做我在最后 3 种风格中已经做过的事情。有谁知道可能是什么问题?
搁置了大约一个星期后,我终于不得不坐下来解决这个问题。
对于那些有同样问题但也在为这个问题的答案摸不着头脑的人:Hide QScrollBar arrows,我发现了一个非常明显的解决方法,现在我正在考虑它。
虽然下面的样式 sheet 实际上 隐藏了 箭头按钮,但它并没有 删除 它们。这在实践中很明显,因为经过进一步测试,单击这些区域仍然会移动手柄,就像我单击箭头按钮一样。
QScrollBar::left-arrow:horizontal, QScrollBar::right-arrow:horizontal,
QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal {
border: none;
background: none;
color: none;
}
QScrollBar::add-line, QScrollBar::sub-line {
border:none;
background-color:none;
}
解决方案非常简单:箭头按钮似乎与滚动条的其余部分不共享样式(因为滚动条被分成子样式)。这意味着,将箭头按钮的 width
和 height
属性设置为 0px
之类的操作将使您 可以 单击手柄。
注意:为了更好的衡量,我还将 add-line
和 sub-line
属性设置为 0px
.
QScrollBar::left-arrow:horizontal, QScrollBar::right-arrow:horizontal,
QScrollBar::add-page:horizontal, QScrollBar::sub-page:horizontal {
border: none;
background: none;
color: none;
width: 0px;
height: 0px;
}
QScrollBar::add-line, QScrollBar::sub-line {
border:none;
background-color:none;
width: 0px;
height: 0px;
}