我想创建一个按钮,显示具有透明背景的给定图像。我正在使用以下代码段:
ui->setupUi(this);
this->setFixedSize(width, height);
QPixmap* orgPixmap = new QPixmap(":/images/a.png");
QSize size(this->width(), this->height());
QPixmap resizePixmap(orgPixmap->scaled(size));
QPalette palette;
palette.setBrush(this->backgroundRole(), QBrush(resizePixmap));
this->setPalette(palette);
ui->toolButton->setStyleSheet("background-color: rgba(255, 255, 255, 0);");
ui->toolButton->setFixedSize(64, 64);
ui->toolButton->setIconSize(QSize(64, 64));
ui->toolButton->setIcon( QIcon(":/images/add.png") );
在小部件的顶部,我添加了一个带图标的按钮。这是一个透明背景的蓝色圆圈。但是,当我在Android设备上部署并运行我的代码时,按钮会显示为带有白色的不透明背景。
请看图片:
我尝试使用以下代码强制按钮的透明度:
QColor transparent_color(0,0,0,0);
QPalette button_palette(ui->pushButton->palette());
button_palette.setColor(QPalette::Button, transparent_color);
ui->toolButton->setPalette(button_palette);
上面的代码似乎没有达到我预期的效果。 我想知道问题可能是什么以及如何解决它。
答案 0 :(得分:0)
我看到你需要一个圆形按钮,那么QWidget::setMask()
怎么样?
QPainterPath path;
path.addEllipse(ui->pushButton->rect());
QRegion mask = QRegion(path.toFillPolygon().toPolygon());
ui->pushButton->setMask(mask);
只是一个想法,我没有测试过。
答案 1 :(得分:0)
您可以设置简单的样式表。如下所示:widget->setStyleSheet(rgba(255, 255, 255,0);");
如果要调整不透明度,只需更改第四个参数即可。
答案 2 :(得分:0)
我已经在基于Qt Graphics View Framework的Win / Mac项目上接受了类似的问题,请注意我从来没有在Android平台上测试过这个问题。
无论如何,首先你需要为你的图形场景设置setForegroundBrush():
ui.yourGraphicsView->scene()->setsetForegroundBrush(Qt::transparent);
或者,您可以使用Qt Designer获取类似的结果或编辑Project.ui文件,如下所示:
<widget class="QGraphicsView" name="yourGraphicsView">
...
<property name="foregroundBrush">
<brush brushstyle="NoBrush">
<color alpha="255">
<red>0</red>
<green>0</green>
<blue>0</blue>
</color>
</brush>
</property>
现在setBackgroundBrush()对你的按钮是透明的:
ui->toolButton->setBackgroundBrush(Qt::transparent);
我发现这两个足以将透明按钮悬停在QGraphicScene中的其他对象上;调用setMask()
不是必需的,因为当QtraphicsPixmapItem(或祖先)设置为alpha通道的PNG时,Qt会自动调用它。对于按钮,它也可以按预期工作:单击PNG的透明区域(上面显示的白色)不会触发OnClick()事件,而单击基于PNG的按钮上的透光部分则会。
希望这会有所帮助......