2023年12月13日发(作者:)

QT为按钮添加图标并设置透明

QT 为按钮添加图标并设置透明

qt中自带的控件有时不能满足我们的需求,这时可以自定义一些控件,最简单的是将按钮变成我们想要的图标,在尝试的过程中有一个按钮

的阴影问题,我的想法是添加图标后就完全看不到阴影了,找了很多办法才解决,下面就是过程:

一、为按钮添加图标

我的方法是将所需要用到的图片添加到资源文件里,然后给按钮添加图标。

1、添加资源文件

建好工程后,点击“File”->“New File or Project …”,在“Files and Classes” 下面选择“Qt”,然后在选择右面的“Qt

Resource File”:

点击确定,会提示文件命名和所要添加到的项目,这里我命名为“resource”,添加到"icon_"项目里面,可以看到在项目的

文件列表中出现了一个""的文件。

右键单击"",选择"Open in Edit",然后点击下方的"Add"按钮,选择"Add Prefix"(相当于添加一个分类),并命名,此处

我命名为image 。

下一步添加图片,需要下载一些".ico"后缀的图片,我下载了几个图片,放在icon文件夹里,然后把icon文件夹放在我

的"icon_"项目所在文件夹里。准备好以后,点击"Add"按钮,选择"Add Files",找到文件,添加进去。

2、给按钮添加图标

在ui设计界面添加一个按钮,大小设置为90*90,注意把按钮上面的文字去掉,要不然的话添加图标后会是左边图标,右边文字(需要那样

的效果的话可以试试)。

我使用了代码方式添加图标:

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include //

注意包含头文件

MainWindow::MainWindow(QWidget *parent) :

QMainWindow(parent),

ui(new Ui::MainWindow)

{

ui->setupUi(this);

QIcon myicon; //

新建

QIcon

对象

e(tr(":/image/icon/")); //

QIcon

对象指向想要的图标

ui->pushButton->setIcon(myicon); //

给按钮添加图标

ui->pushButton->setIconSize(QSize(90,90));//

重置图标大小

}

MainWindow::~MainWindow()

{

delete ui;

}

结果如图:

可以看到,按钮上显示了图标。

二、设置图标按钮为透明从网上看设置图标透明的方法有好几种,比如:

1)setFlat(true)

2)找到按钮属性里最下面的flag属性,勾选对话框(其实与1)一样的意思)

3)在按钮stylesheet属性里输入“background-color:transparent”或者“border:none”等4)setStyleSheet(“background-color: rgba(0, 0, 0, 0)”);

大致是这样的方法,效果如图:

可以看到此时显示按钮原来的实体的颜色没了,但是出现了原来按钮大小的阴影,其实如果我们再添加一个按钮,运行后点击后来添加的按

钮,会发现图标的阴影没有了,也就是说上面的方法部分实现了静态时的背景透明:

而再次点击图标按钮时候,阴影还是存在!这对于追求完美的我们来说是不能接收啊!!怎么解决呢?

最后试了半天,原来是找的属性不对,用了下面的方法就可以实现目的了:

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include //

注意包含头文件

MainWindow::MainWindow(QWidget *parent) :

QMainWindow(parent),

ui(new Ui::MainWindow)

{

ui->setupUi(this);

QIcon myicon; //

新建

QIcon

对象

e(tr(":/image/icon/")); //

QIcon

对象指向想要的图标

ui->pushButton->setIcon(myicon); //

给按钮添加图标

ui->pushButton->setIconSize(QSize(90,90));//

重置图标大小

ui->pushButton->setStyleSheet("background-color:rgba(0,0,0,0)");

ui->pushButton->setFocusPolicy(Qt::NoFocus);

}

MainWindow::~MainWindow()

{

delete ui;

}

之前之所以老是有阴影是涉及到Qt控件的聚焦策略问题,pushbutton默认的聚焦策略是StrongFocus,我们要把它改成NoFocus就行

了,这个也可以在ui界面的控件属性选项里面改。

上面程序里的

ui->pushButton->setStyleSheet("background-color:rgba(0,0,0,0)");

这句代码也可以改成

ui->pushButton->setStyleSheet("background-color:transparent");

或者在stylesheet属性里面添加相应约束,但注意不能使用 1)和 2)的方法,否则,在点击按钮时,虽然没显示阴影,但是把原来的按钮

都显示出来了(还不如显示阴影呢~)。最后的结果就是这样:

就算点破屏幕也再不会有阴影啦