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)的方法,否则,在点击按钮时,虽然没显示阴影,但是把原来的按钮
都显示出来了(还不如显示阴影呢~)。最后的结果就是这样:
就算点破屏幕也再不会有阴影啦


发布评论