QT 自定义开关效果的按钮
Qt 之自定义控件(开关按钮)
Qt自定义控件13:继承QPushButton自绘按钮
有两种方式一个是继承 QPushButton;一个是继承 QWidget
这里选择继承 QPushButton(方便点)
要实现控件一下效果
需要重写paintEvent(QPaintEvent *event)
#include "SwitchControlButton.h"
#include<QPainter>SwitchControlButton::SwitchControlButton(QWidget *parent ):QPushButton(parent)
{setCheckable(true);this->setMinimumWidth(height()*2);//圆角this->setStyleSheet("QPushButton{ border-radius:10px;}");}
SwitchControlButton::~SwitchControlButton()
{}
void SwitchControlButton::paintEvent(QPaintEvent *event)
{//绘制准备工作,启用反锯齿QPainter painter(this);painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);drawBackground(&painter);drawRect(&painter);drawText(&painter);
}
void SwitchControlButton::drawText(QPainter *painter)
{int width = this->width();int height = this->height();painter->save();QRect rect;if (isChecked()){rect = QRect(0, 0, width-height, height);}else{rect = QRect(height, 0, width - height, height);}QFont font = painter->font();painter->setFont(font);QString text = this->text();painter->setPen(m_textColor);painter->drawText(rect, Qt::AlignCenter, text);painter->restore();
}
void SwitchControlButton::drawBackground(QPainter *painter)
{int width = this->width();int height = this->height();painter->save();if (isChecked()){painter->setBrush(m_CheckedBgColor);}else{painter->setBrush(m_unCheckedBgColor);}QRect rect(0, 0, width, height);painter->setPen(Qt::NoPen);painter->drawRect(rect);painter->restore();}void SwitchControlButton::drawRect(QPainter *painter)
{int width = this->width();int height = this->height();painter->save();painter->setPen(Qt::NoPen);painter->setBrush(QColor(255,255,255));QRect rect;if (isChecked()){rect = QRect(width - height,0, height, height);}else{rect= QRect(0, 0, height, height);}painter->drawRoundRect(rect);painter->restore();
}
需要注意的地方有:
绘制背景:void SwitchControlButton::drawBackground(QPainter *painter)
需要设置
painter->setPen(Qt::NoPen);
qt自带的Pen是黑色一像素的笔,会给在背景中加黑框。
如果不需要框出按键,就去掉pen
设置文字时注意 drawText(QPainter *painter)
不要让白色的按钮遮挡文字,所以要计算文字显示的位置,然后放置文字:
QRect rect;if (isChecked()){rect = QRect(0, 0, width-height, height);}else{rect = QRect(height, 0, width - height, height);}QFont font = painter->font();painter->setFont(font);QString text = this->text();painter->setPen(m_textColor);painter->drawText(rect, Qt::AlignCenter, text);
如果想要绘制圆角的 按钮
这里配置qss时不管用的,因为我们重写了paintEvent事件
所以我们要在paintEvent事件更改
上图样式要更改两个地方
背景绘制函数
void SwitchControlButton::drawBackground(QPainter *painter)
{//painter->drawRect(rect);这个是直角矩形painter->drawRoundedRect(rect, 4, 4);//改成圆角矩形
}
绘制小方框的函数
void SwitchControlButton::drawRect(QPainter *painter)
{
painter->drawRoundedRect(rect,3, 3);
//painter->drawRoundRect(rect);
}
这里参数写3是为了 让小方框看起来是嵌进去的
圆角的按钮重写paintEvent事件
QT 自定义开关效果的按钮相关推荐
- 【Qt】qt自定义开关控件
基于QWidget实现一个简单的开关控件,左右动画效果切换,效果如下 样式在paintEvent中绘制 void RdSwitchButton::paintEvent(QPaintEvent *eve ...
- Qt自定义QPushButton
目录 Qt自定义QPushButton 设置图标按钮 Qt自定义QPushButton 设置图标按钮 代码: m_pMinimizeButton = new QPushButton(this);m_p ...
- Qt 自定义(异形)形状按钮封装及实现点击弹跳效果
文章目录 前言 效果 核心代码 mybutton.h mybutton.cpp widget.h widget.cpp 前言 Qt通过重新封装QPushButton类,实现自定义(异形)按钮,并且实现 ...
- Qt工作笔记-自定义开关控件
1.自定义开关控件: 2.点击有动画效果: 3.在动画效果中,不再响应信号: 运行截图如下: 输出响应信号: 源码如下: myonoff.h #ifndef MYONOFF_H #define MYO ...
- WPF自定义开关切换按钮
WPF自定义开关切换按钮 突发奇想先要自己写一个开关按钮,说干就开干了,以下为View视图布局代码,开关按钮的样式就直接在这里定义了,主要呢通过定义触发器来完成按钮的切换. ```csharp < ...
- Qt 自定义标题栏,最小化、最大化、关闭窗口,双击最大化,鼠标拖动等效果实现
文章目录 前言 效果 代码 .pro文件 widget.h widget.cpp widget.ui title.h title.cpp title.ui 前言 本次实验内容为Qt自定义标题栏,最小化 ...
- QT 自定义图片按钮
根据一位Qt博主的开源代码学习一下,顺便做个笔记. 新建一个类继承自QWidget 重写paintEvent函数把图片画出来 重写mousePressEvent处理数据点击事件,鼠标每次点击就切换按钮 ...
- android 高仿ios开关,Android自定义view仿IOS开关效果
本文主要讲解如何在 Android 下实现高仿 iOS 的开关按钮,并非是在 Android 自带的 ToggleButton 上修改,而是使用 API 提供的 onDraw.onMeasure.Ca ...
- 【Android自定义Dialog】电视机开关效果的Dialog
前言: 今天没有什么工作要做,就准备网上找个源码解剖下,找些干货耍耍.在DEV资源网找到了这个http://www.devstore.cn/code/info/1144.html[Android音乐播 ...
最新文章
- LinearAlgebra_3
- Oracle 表空间与数据文件
- 天池 在线编程 聪明的销售(计数+贪心)
- Tornado 高并发源码分析之六---异步编程的几种实现方式
- 剑灵电五服务器位置,选对服务器很重要 剑灵新手选服攻略
- JAVA日期查询:季度、月份、星期等时间信息
- python测试驱动开发 中文版_GitHub - starryrbs/python_tdd: 使用Python测试驱动开发完成Django项目...
- 给控件做数字签名之二:生成证书文件
- 如何在HTML中添加背景音乐?
- 使用 Nginx 服务器配置 flv、mp4,可以直接浏览器播放
- Python中的Counter类
- 如何计算离职率(1)?
- hellow word
- SONET/SDH帧格式
- ++a与a++、--a与a--
- matlab滞环比较控制器,滞环比较跟踪控制技术
- JetBrains PyCharm JetBrains PyCharm 2018.1.3 x64永久破解
- 步进电机相关基础知识及常见问题(转载)
- 小时候真傻,居然想着快快长大
- Spring面试题及答案(2021年Spring面试题大全带答案)