使用简单的QPushButton,如果我想使用自定义图像,而按钮的大小由布局决定(因此可以自由缩放),则唯一的可能性是在样式表中覆盖border-image
。如果我将图像添加为image
属性而不是border-image
,则图像不会按比例缩小。
但是,如果我使用QRadioButton并覆盖image
或border-image
,则单选按钮的圆圈仍然可见。我找不到隐藏或覆盖它的方法。
一种可能性是忽略标签,并更改圆圈图标本身。可以通过覆盖QRadioButton:indicator
来完成此操作,但是,它不接受border-image
,而仅接受image
,但无法缩放。
有什么办法解决这个问题,还是我坚持将QPushButton与setCheckable(true)
配合使用,并在每次按下其中一个按钮时手动进行处理?
我尝试为标签指定边框图像,为指示符指定不存在的图像:
ui->radioButton->setStyleSheet(
"QRadioButton { border-image: url(:/img/off.png) 0 0 0 0 stretch stretch; }"
"QRadioButton:checked { border-image: url(:/img/on.png) 0 0 0 0 stretch stretch; }"
"QRadioButton:pressed { border-image: url(:/img/off_pressed.png) 0 0 0 0 stretch stretch; }"
"QRadioButton:checked:pressed { border-image: url(:/img/on_pressed.png) 0 0 0 0 stretch stretch; }"
"QRadioButton:indicator:unchecked {image: url()}"
"QRadioButton:indicator:checked {image: url()}"
"QRadioButton:indicator:unchecked:pressed {image: url()}"
"QRadioButton:indicator:checked:pressed {image: url()}"
);
问题是,尽管圆现在不可见,但它仍然占用空间,因此图像不会填满整个可用空间。
答案 0 :(得分:1)
将指标的大小减小到零似乎是可行的。它仍然是一个丑陋的骇客(除非将Qt still doesn't support可缩放的图像用于按钮和标签,除非它们被定义为边框图像),但是它确实有效。
ui->radioButton->setStyleSheet(
"QRadioButton { border-image: url(:/img/off.png) 0 0 0 0 stretch stretch; }"
"QRadioButton:checked { border-image: url(:/img/on.png) 0 0 0 0 stretch stretch; }"
"QRadioButton:pressed { border-image: url(:/img/off_pressed.png) 0 0 0 0 stretch stretch; }"
"QRadioButton:checked:pressed { border-image: url(:/img/on_pressed.png) 0 0 0 0 stretch stretch; }"
"QRadioButton:indicator {width: 0px; height: 0px;}"
);
此解决方案的一个缺点是,似乎是由于不存在指示符,导致将大量QPianter错误打印到stdout:
QPainter::begin: Paint device returned engine == 0, type: 3
为避免这种情况,我创建了一个1x1像素的完全透明的png图像
"QRadioButton:indicator {width: 1px; height: 1px; image: url(:/img/empty.png)}"
这同样有效,而不会生成QPainter错误消息。
编辑:
正如Maxim Paperno所说,这也有效:
"QRadioButton:indicator {image: null}"