首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以对QRadioButton使用自定义可伸缩图像?

是否可以对QRadioButton使用自定义可伸缩图像?
EN

Stack Overflow用户
提问于 2020-01-10 14:02:23
回答 1查看 331关注 0票数 1

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

但是,如果我使用QRadioButton并覆盖imageborder-image,单选按钮的圆圈仍然可见。我找不到隐藏或覆盖它的方法。

一种可能是忽略标签,并更改圆形图标本身。这可以通过重写QRadioButton:indicator来完成,但是,它不接受border-image,它只接受不会缩放的image

有没有办法解决这个问题,或者我坚持使用带有setCheckable(true)的QPushButton,并在其中一个按钮被按下时手动处理其他按钮?

我尝试为标签指定一个边框图像,并为指示器指定一个不存在的图像:

代码语言:javascript
复制
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()}"
);

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

EN

回答 1

Stack Overflow用户

发布于 2020-01-10 14:44:34

将指示器的大小减少到零似乎是可行的。这仍然是一个丑陋的技巧(就像按钮和标签的Qt still doesn't support可缩放图像,除非它们被定义为边框图像),但它是有效的。

代码语言:javascript
复制
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错误被打印到标准输出,似乎是因为不存在的指示器:

代码语言:javascript
复制
QPainter::begin: Paint device returned engine == 0, type: 3

为了避免这种情况,我创建了一个1x1像素的完全透明的png图像

代码语言:javascript
复制
"QRadioButton:indicator {width: 1px; height: 1px; image: url(:/img/empty.png)}"

这也同样有效,而不会生成QPainter错误消息。

编辑:

正如Maxim Paperno评论的那样,这也是可行的:

代码语言:javascript
复制
"QRadioButton:indicator {image: null}"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59676248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档