Qt 贴图实现方向控制盘
创始人
2024-05-30 16:03:10
0

一、效果走一波

二、使用贴图进行不规则按钮的设计与开发

开发环境描述:QtCreator + Qt Desinger

(1)首先准备待贴的图片

​ 图片的切片大小必须一样,背景为透明的;将待贴的所有图片都切下来,文件标明名称与尺寸大小,便于管理与查询。

​ 【注意事项】
​ 1、当使用贴图时,说明软件那部分的UI界面基本完成了设计。在进行贴图素材切片时,一定要注意贴图区域功能的分离。

​ 2、所有的切片操作都必须在一个固定大小的区域内进行,即切片出来的所有图片的尺寸大小全都保持一致。由于这一点,在切片前需要考虑功能的完整性,和实际的贴图效果。

(2)在Qt Creator中创建待贴图的QPushButton创建5个待贴图的按钮(QPushButton)

(3)将所有的按钮移动到一个位置上,这一步非常关键,如果不移动到一个位置上,贴图会出现位置不一致的情况。

(4)使用setMask()函数进行贴图

    QPixmap btn_1(":/assets/images/bg_image_pink_4_03.png");ui->pushButton->setIconSize(btn_1.size());ui->pushButton->resize(btn_1.size());ui->pushButton->setMask(btn_1.mask());ui->pushButton->setStyleSheet("QPushButton{border:0px;border-image:url(:/assets/images/bg_image_pink_4_03.png)}""QPushButton:pressed{border-image:url(:/icons/largeDisplayIcon_normal_128.png)};""QPushButton:hover{border-image:url(:/icons/largeDisplayIcon_clieked_128.png)};");

​ 按照以上代码,逐一设置5个待贴图的按钮。在setStyleSheet()函数中可以设置按钮的样式表。

​ 通过以上步骤,就完成一个自定义按钮的贴图。但是最重要的一点:那就是Qt开发一个软件UI,如果使用到了贴图进行UI实现,不使用QPainter自绘制。最好将贴图部分都分离出来,做成单独的QWidget控件。这样,可以避免设计的关联性太强;当设计修改时,只用改动局部的设计即可。

(5)按钮的使用与QPushButton、QToolButton一样。

三、【核心代码】

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);setAttribute(Qt::WA_TranslucentBackground);//设置背景贴图QPixmap pixmap;pixmap.load(":/assets/bgimage.png");resize(pixmap.size());setMask(pixmap.mask());//顶部按钮QPixmap topBtn(":/assets/topBtn.png");ui->pushButton->setIconSize(topBtn.size());ui->pushButton->resize(topBtn.size());ui->pushButton->setMask(topBtn.mask());ui->pushButton->setStyleSheet("QPushButton{border:0px;border-image:url()}""QPushButton:pressed{border-image:url(:/assets/topBtn.png)};");//左侧按钮QPixmap leftBtn(":/assets/leftBtn.png");ui->pushButton_2->setIconSize(leftBtn.size());ui->pushButton_2->resize(leftBtn.size());ui->pushButton_2->setMask(leftBtn.mask());ui->pushButton_2->setStyleSheet("QPushButton{border:0px;border-image:url()}""QPushButton:pressed{border-image:url(:/assets/leftBtn.png)};");//底部按钮QPixmap bottomBtn(":/assets/bottomBtn.png");ui->pushButton_3->setIconSize(bottomBtn.size());ui->pushButton_3->resize(bottomBtn.size());ui->pushButton_3->setMask(bottomBtn.mask());ui->pushButton_3->setStyleSheet("QPushButton{border:0px;border-image:url()}""QPushButton:pressed{border-image:url(:/assets/bottomBtn.png)};");//右侧按钮QPixmap rightBtn(":/assets/rightBtn.png");ui->pushButton_4->setIconSize(rightBtn.size());ui->pushButton_4->resize(rightBtn.size());ui->pushButton_4->setMask(rightBtn.mask());ui->pushButton_4->setStyleSheet("QPushButton{border:0px;border-image:url()}""QPushButton:pressed{border-image:url(:/assets/rightBtn.png)};");//中间按钮QPixmap centerBtn(":/assets/centerBtnImage.png");ui->pushButton_5->setIconSize(centerBtn.size());ui->pushButton_5->resize(centerBtn.size());ui->pushButton_5->setMask(centerBtn.mask());ui->pushButton_5->setStyleSheet("QPushButton{border:0px;border-image:url()}""QPushButton:pressed{border-image:url(:/assets/centerBtnImage.png)};");
}Widget::~Widget()
{delete ui;
}void Widget::paintEvent(QPaintEvent *)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);painter.drawPixmap(0,0,QPixmap(":/assets/bgimage.png"));
}

相关内容

热门资讯

润禾材料涨2.27%,成交额1... 5月12日,润禾材料盘中上涨2.27%,截至09:35,报39.18元/股,成交1948.55万元,...
众源新材涨2.04%,成交额1... 5月12日,众源新材盘中上涨2.04%,截至09:40,报10.02元/股,成交1926.44万元,...
浔兴股份跌2.54%,成交额1... 5月12日,浔兴股份(维权)盘中下跌2.54%,截至09:41,报9.20元/股,成交1.01亿元,...
突发!金价大跌,A股港股高开!... 每经编辑|毕陆名 刚刚过去的这个周末,大事频发,随着中美贸易谈判出现积极进展、印巴...
捷强装备跌2.15%,成交额7... 5月12日,捷强装备盘中下跌2.15%,截至09:35,报29.58元/股,成交7273.96万元,...
厚普股份涨2.06%,成交额2... 5月12日,厚普股份盘中上涨2.06%,截至09:40,报9.91元/股,成交2302.99万元,换...
东芯股份涨2.01%,成交额5... 5月12日,东芯股份盘中上涨2.01%,截至09:40,报32.52元/股,成交5488.77万元,...
菲利华涨2.01%,成交额72... 5月12日,菲利华盘中上涨2.01%,截至09:42,报48.75元/股,成交7210.29万元,换...
富满微涨2.01%,成交额23... 5月12日,富满微盘中上涨2.01%,截至09:41,报30.41元/股,成交2314.82万元,换...
5月12日人民币对美元中间价报... 中新网5月12日电 据中国外汇交易中心网站消息,中国人民银行授权中国外汇交易中心公布,2025年5月...
梦洁股份跌2.07%,成交额1... 5月12日,梦洁股份(维权)盘中下跌2.07%,截至09:42,报3.79元/股,成交1906.76...
盛泰集团跌2.02%,成交额1... 5月12日,盛泰集团盘中下跌2.02%,截至09:41,报6.30元/股,成交1688.14万元,换...
普利退涨2.67%,成交额24... 5月12日,普利退(维权)盘中上涨2.67%,截至09:42,报0.77元/股,成交246.72万元...
西部超导涨2.00%,成交额8... 5月12日,西部超导盘中上涨2.00%,截至09:41,报50.90元/股,成交8972.82万元,...
锂电池ETF(561160)开... 5月12日,锂电池ETF(561160)开盘涨1.27%,报0.479元。锂电池ETF(561160...
中药50ETF(562390)... 5月12日,中药50ETF(562390)开盘涨0.32%,报0.952元。中药50ETF(5623...
新能源车龙头ETF(15963... 5月12日,新能源车龙头ETF(159637)开盘涨0.66%,报0.611元。新能源车龙头ETF(...
机床ETF(159663)开盘... 5月12日,机床ETF(159663)开盘涨0.90%,报1.122元。机床ETF(159663)重...
碳中和龙头ETF(159640... 5月12日,碳中和龙头ETF(159640)开盘涨0.54%,报0.742元。碳中和龙头ETF(15...
交运ETF(159662)开盘... 5月12日,交运ETF(159662)开盘涨0.20%,报0.991元。交运ETF(159662)重...