首页| 论坛| 消息

标题:Qt编写超级多态按钮WKButton
作者:liudianwu
日期:2018-03-16 14:00
内容:

一个朋友需要定制一个按钮,部分需求如下:
1.可以设置圆角(Radius)值。
2.可以设置边框的粗细(BorderSize)和颜色(BorderColor)
3.背景颜色有两种颜色RColor和PColor。
4.背景颜色显示模式有3种:
a)松开状态的颜色为RColor;按下状态的颜色为PColor。
b)松开状态的颜色为按键上半部分是RColor,按键下半部分为PColor;按下状态的颜色为按键上半部分是PColor,按键下半部分为RColor。
c)松开状态的颜色为RColor到PColor的渐变色;按下状态的颜色为按键上半部分是PColor到RColor的渐变色。
5.按键内部可以显示3行文字(Text[3]),并对每行文字设置字体、对齐、大小、颜色。
6.可以处理鼠标按下、松开、移动、拖拽的事件。
7.可以显示图片,当显示图片时自动覆盖背景颜色和文字,但保留边框和圆角。
实现效果:
集成在QUC自定义控件中


核心代码:
void WKButton::paintEvent(QPaintEvent *)
{
//绘制准备工作,启用反锯齿
QPainter painter(this);
painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);
//绘制背景
drawBg(&painter);
//绘制文字
drawText(&painter);
}
void WKButton::drawBg(QPainter *painter)
{
painter->save();
//设置边框颜色及宽度
QPen pen;
pen.setColor(borderColor);
pen.setWidthF(borderWidth);
painter->setPen(pen);
//绘制区域要减去边框宽度
QRect rect;
rect.setX(borderWidth);
rect.setY(borderWidth);
rect.setWidth(width() - borderWidth * 2);
rect.setHeight(height() - borderWidth * 2);
//如果背景图片存在则显示背景图片,否则显示背景色
if (!bgImage.isNull()) {
//等比例缩 ..


#1 [jimiy 03-16 15:57]
刘大神,能否发一份完整版给晚辈 lee132264@163.com 膜拜了
#2 [liuchangyin 03-19 08:50]
漂亮
#3 [哥依然潇洒 03-27 08:41]
原来paintevent还能这样用!厉害了!
#4 [sa12010055 03-27 09:29]
刘前辈,目前在学习Qt,看了您的文章受益很多。源码能发一份给我,供我参考学习一下,谢谢了~~
596042122@qq.com
#5 [向之想 03-29 17:19]
刘大神能否给再下发一份,学习下
daxiangs@126.com

<< 1 2 3 >> (1/4)

回复 发表
主题 版块