当前位置: 首页 > news >正文

qt 背景和控件布局_Qt编写自定义控件26-平铺背景控件

一、前言

平铺背景控件,主要的应用场景是作为画布出现,黑白相间的背景图,然后上面可以放置图片图形等,使得看起来更美观,比如PS软件新建图层以后的背景,FireWorks软件新建画布以后的透明背景,ICO制作软件新建画布以后的背景,都会采用一个黑白相间的背景。尽管本人用QPainter很多年,后面在翻阅QPainter自带的函数中才发现居然QPainter自带了这个绘制平铺背景的函数,擦,他么叫drawTiledPixmap,Qt不愧是跨平台GUI开发中的佼佼者,这些东西居然都考虑到了,说到考虑的周到,Qt中连size和count和length都完美的封装了,适合不同人群的使用习惯,这个考虑也是非常周到的。drawTiledPixmap就两个参数,第一个参数是要绘制的区域,第二个参数是要绘制的图片,图片不足会自动拷贝填充,所以如果提供的是两个交替颜色的背景图片,就会依次绘制形成平铺背景的效果,为了使得颜色可以控制,本控件增加了交替颜色的设置,可以自行传入两种颜色作为交替颜色,在程序内部自动生成要绘制的图片。

二、实现的功能

1:可设置交替背景颜色

三、效果图

四、头文件代码

#ifndef TILEDBG_H

#define TILEDBG_H

/**

* 平铺背景控件 作者:feiyangqingyun(QQ:517216493) 2018-8-25

* 1:可设置交替背景颜色

*/

#include

#ifdef quc

#if (QT_VERSION < QT_VERSION_CHECK(5,7,0))

#include

#else

#include

#endif

class QDESIGNER_WIDGET_EXPORT TiledBg : public QWidget

#else

class TiledBg : public QWidget

#endif

{

Q_OBJECT

Q_PROPERTY(QColor color1 READ getColor1 WRITE setColor1)

Q_PROPERTY(QColor color2 READ getColor2 WRITE setColor2)

Q_PROPERTY(QPixmap bgPix READ getBgPix WRITE setBgPix)

public:

explicit TiledBg(QWidget *parent = 0);

protected:

void drawBg();

void paintEvent(QPaintEvent *);

private:

QColor color1; //颜色1

QColor color2; //颜色2

QPixmap bgPix; //背景图片

public:

QColor getColor1() const;

QColor getColor2() const;

QPixmap getBgPix() const;

QSize sizeHint() const;

QSize minimumSizeHint() const;

public slots:

//设置颜色1

void setColor1(const QColor &color1);

//设置颜色2

void setColor2(const QColor &color2);

//设置背景图片

void setBgPix(const QPixmap &bgPix);

};

#endif // TILEDBG_H

五、核心代码

#pragma execution_character_set("utf-8")

#include "tiledbg.h"

#include "qpainter.h"

#include "qdebug.h"

TiledBg::TiledBg(QWidget *parent) : QWidget(parent)

{

color1 = QColor(255, 255, 255);

color2 = QColor(220, 220, 220);

bgPix = QPixmap(64, 64);

drawBg();

}

void TiledBg::drawBg()

{

bgPix.fill(color1);

QPainter painter(&bgPix);

painter.fillRect(0, 0, 32, 32, color2);

painter.fillRect(32, 32, 32, 32, color2);

painter.end();

update();

}

void TiledBg::paintEvent(QPaintEvent *)

{

QPainter painter(this);

painter.drawTiledPixmap(this->rect(), bgPix);

}

QColor TiledBg::getColor1() const

{

return this->color1;

}

QColor TiledBg::getColor2() const

{

return this->color2;

}

QPixmap TiledBg::getBgPix() const

{

return this->bgPix;

}

QSize TiledBg::sizeHint() const

{

return QSize(100,100);

}

QSize TiledBg::minimumSizeHint() const

{

return QSize(20,20);

}

void TiledBg::setColor1(const QColor &color1)

{

if (this->color1 != color1) {

this->color1 = color1;

drawBg();

}

}

void TiledBg::setColor2(const QColor &color2)

{

if (this->color2 != color2) {

this->color2 = color2;

drawBg();

}

}

void TiledBg::setBgPix(const QPixmap &bgPix)

{

this->bgPix = bgPix;

update();

}

六、控件介绍

超过149个精美控件,涵盖了各种仪表盘、进度条、进度球、指南针、曲线图、标尺、温度计、导航条、导航栏,flatui、高亮按钮、滑动选择器、农历等。远超qwt集成的控件数量。

每个类都可以独立成一个单独的控件,零耦合,每个控件一个头文件和一个实现文件,不依赖其他文件,方便单个控件以源码形式集成到项目中,较少代码量。qwt的控件类环环相扣,高度耦合,想要使用其中一个控件,必须包含所有的代码。

全部纯Qt编写,QWidget+QPainter绘制,支持Qt4.6到Qt5.12的任何Qt版本,支持mingw、msvc、gcc等编译器,支持任意操作系统比如windows+linux+mac+嵌入式linux等,不乱码,可直接集成到Qt Creator中,和自带的控件一样使用,大部分效果只要设置几个属性即可,极为方便。

每个控件都有一个对应的单独的包含该控件源码的DEMO,方便参考使用。同时还提供一个所有控件使用的集成的DEMO。

每个控件的源代码都有详细中文注释,都按照统一设计规范编写,方便学习自定义控件的编写。

每个控件默认配色和demo对应的配色都非常精美。

超过130个可见控件,6个不可见控件。

部分控件提供多种样式风格选择,多种指示器样式选择。

所有控件自适应窗体拉伸变化。

集成自定义控件属性设计器,支持拖曳设计,所见即所得,支持导入导出xml格式。

自带activex控件demo,所有控件可以直接运行在ie浏览器中。

集成fontawesome图形字体+阿里巴巴iconfont收藏的几百个图形字体,享受图形字体带来的乐趣。

所有控件最后生成一个dll动态库文件,可以直接集成到qtcreator中拖曳设计使用。

目前已经有qml版本,后期会考虑出pyqt版本,如果用户需求量很大的话。

七、SDK下载

下载链接中包含了各个版本的动态库文件,所有控件的头文件,使用demo,自定义控件+属性设计器。

自定义控件插件开放动态库dll使用(永久免费),无任何后门和限制,请放心使用。

目前已提供26个版本的dll,其中包括了qt5.12.3 msvc2017 32+64 mingw 32+64 的。

不定期增加控件和完善控件,不定期更新SDK,欢迎各位提出建议,谢谢!

widget版本(QQ:517216493)qml版本(QQ:373955953)三峰驼(QQ:278969898)。

欢迎关注微信公众号【高效程序员】,C++/Python、学习方法、写作技巧、热门技术、职场发展等内容,干货多多,福利多多!

相关文章:

  • 博客性别测试
  • 联想小新潮7000黑苹果教程_联想小新 潮7000-13怎么装win10系统|联想小新 潮7000-13用u盘重装win10系统教程-系统城...
  • stc单片机485发送多出一字节_请问51单片机如何解决多字节串口发送 接收问题
  • 我的手机游戏回忆-风云剑侠
  • pytorch 获取模型参数_[PyTorch]PyTorch中模型的参数初始化的几种方法(转)
  • 成功人物们的30岁都在做什么
  • 30岁时候的他们
  • 复频域求零输入响应_PostStack/PAL属性提取——一般属性和复地震道统计
  • 2007中国互联网市场走势浅析
  • python eureka服务发现_Eureka的细节(首页显示微服务名、外网访问显示正确ip、详情信息、服务发现)...
  • ubuntu 改屏幕分辨率命令_如何调整Ubuntu系统的分辨率和屏幕刷新率?
  • 一位销售的几年职业总结
  • data闭包 vue_vue中methods中的方法闭包缓存问题
  • 好用的视频转换切割软件
  • 中科罗伯特机器人吧_从汽车行业能预见工业机器人的未来吗
  • extjs4学习之配置
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • javascript从右向左截取指定位数字符的3种方法
  • JavaWeb(学习笔记二)
  • java中的hashCode
  • JS笔记四:作用域、变量(函数)提升
  • linux安装openssl、swoole等扩展的具体步骤
  • MD5加密原理解析及OC版原理实现
  • Mysql5.6主从复制
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • Redash本地开发环境搭建
  • Service Worker
  • Theano - 导数
  • Vim 折腾记
  • 记一次和乔布斯合作最难忘的经历
  • 聚簇索引和非聚簇索引
  • 如何使用 JavaScript 解析 URL
  • 我是如何设计 Upload 上传组件的
  • 正则表达式
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • ​TypeScript都不会用,也敢说会前端?
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • $(function(){})与(function($){....})(jQuery)的区别
  • (145)光线追踪距离场柔和阴影
  • (分布式缓存)Redis分片集群
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (十)c52学习之旅-定时器实验
  • (五)Python 垃圾回收机制
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .htaccess 强制https 单独排除某个目录
  • .htaccess配置重写url引擎
  • .NET框架设计—常被忽视的C#设计技巧
  • @test注解_Spring 自定义注解你了解过吗?
  • [ Algorithm ] N次方算法 N Square 动态规划解决
  • []Telit UC864E 拨号上网
  • [acm算法学习] 后缀数组SA
  • [AIGC] Kong:一个强大的 API 网关和服务平台