有没有一种方法可以像使用 QLabel 一样在 QCheckBox 中换行文本?
label = QLabel( QString.fromUtf8('long text in here'))
label.setWordWrap(True)
我尝试了
\n
这将添加换行符,但如果我调整窗口大小,这不是动态的。
似乎有一个功能请求,位于 https://bugreports.qt.io/browse/QTBUG-5370。
该问题尚未解决,因此该功能可能尚未实现。这意味着目前无法向 QCheckBox 添加自动换行。
您可以尝试各种解决方法,例如在右侧添加一个空文本 QCheckBox 和一个 QLabel,或者尝试为复选框放置较短的文本,并在其下方添加一个带有长解释的标签。
您可以为 QtDesigner 开发自定义小部件以图形方式(或不)使用此功能。
CheckBoxWordWrap
(调整大小时动态):
在 QtDesigner 中:
如果行为不完全是您想要的,您还可以使用该类并修改它。
不幸的是,对此没有简短的解决方案。我们必须自己实现这一点。
LineWrappedRadioButton
类的完整实现已在相关答案中提供。您可以通过简单地从 LineWrappedCheckBox
而不是从那里的 QCheckBox
派生来轻松将此代码转换为 QRadioButton
类。
像这样使用它:
int main(int argc, char **argv) {
QApplication app(argc, argv);
LineWrappedCheckBox checkBox("Lorem ipsum dolor sit amet, consectetur adipisici elit, sed eiusmod tempor incidunt ut labore et dolore magna aliqua.");
checkBox.show();
return app.exec();
}
这将产生以下结果:
10 年后回答,但我使用自定义小部件解决了这个问题
class custom_checkbox(QCheckBox):
def __init__(self, text):
super().__init__()
layout = QHBoxLayout()
text_label = QLabel()
text_label.setText(text)
text_label.setWordWrap(True)
layout.addWidget(text_label)
self.setLayout(layout)
self.mouse_inside = False
def enterEvent(self, event):
self.mouse_inside = True
def leaveEvent(self, event):
self.mouse_inside = True
def mousePressEvent(self, event):
if self.mouse_inside:
self.setChecked(not self.isChecked())
您必须为自己创建的 checkbow 小部件设置自定义 css,否则它会看起来有问题
这是我用于名为 checkbox_widget 的复选框小部件的 css
checkbox_widget.setStyleSheet(f"""
QCheckBox {{
background-color: {color};
color: white;
padding: 30px;
border-radius: 5px;
border : none
}}
QCheckBox::indicator {{
image: none;
}}
QCheckBox::indicator:checked {{
image: none;
}}
QLabel {{
background-color : {color};
padding: 20px;
font-size: 20px
}}
""")
如果您想要指示器,请删除该 css 并将标签的 padding-left 值更改为大约 40px,它应该可以正常工作
checkbox_widget.setStyleSheet(f"""
QCheckBox {{
background-color: {color};
color: white;
padding: 30px;
border-radius: 5px;
}}
QCheckBox::indicator {{
subcontrol-position:left;
background-color: {color_for_unchecked_indicator};
border-radius: 4px;
}}
QCheckBox::indicator:checked {{
background-color: {color_for_checked_indicator};
}}
QLabel {{
padding-left: 40px;
}}
""")