是否可以为QRadioButton使用自定义可缩放图像?

问题描述 投票:1回答:2

[使用简单的QPushButton,如果我想使用自定义图像,而按钮的大小由布局决定(因此可以自由缩放),则唯一的可能性是在样式表中覆盖border-image。如果我将图像添加为image属性而不是border-image,则图像不会按比例缩小。

但是,如果我使用QRadioButton并覆盖imageborder-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()}"
);

问题是,尽管现在看不到该圆圈,但它仍然占用空间,因此图像不会填满整个可用空间。

qt qtstylesheets qradiobutton
2个回答
0
投票

[...]我是否坚持将QPushButton与setCheckable(true)结合使用,并且只要按下其中一个按钮,就可以手动处理其他按钮?

[无需手动处理任何事情:将每个按钮的autoExclusive属性设置为autoExclusive,或将它们放在排他的按钮组中。


0
投票

将指标的大小减小为零似乎可行。它仍然是一个丑陋的黑客(如按钮和标签的Qt true可缩放图像,除非它们被定义为边框图像),但是它可以工作。

still doesn't support

此解决方案的缺点是,似乎由于不存在指示符,所以将许多QPianter错误打印到标准输出:

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;}"
);
© www.soinside.com 2019 - 2024. All rights reserved.