代码:

#ifndef RULERWIDGET_H
#define RULERWIDGET_H#include <QWidget>class RulerWidget : public QWidget
{Q_OBJECTpublic:RulerWidget(Qt::Orientations orientation, QWidget *parent = nullptr);~RulerWidget()override;protected:void paintEvent(QPaintEvent *event)override;private:QColor backgroundColor{Qt::white};//背景色QColor textAndLineColor{"#606060"};//文本和刻度颜色Qt::Orientations orientation;QFont font{"微软雅黑",18};
};#endif // RULERWIDGET_H
#include "rulerwidget.h"
#include <QPainter>
#include <QPaintEvent>RulerWidget::RulerWidget(Qt::Orientations orientation,QWidget *parent): QWidget(parent),orientation(orientation)
{orientation == Qt::Horizontal ? setMinimumHeight(100) : setMinimumWidth(100);
}RulerWidget::~RulerWidget()
{
}void RulerWidget::paintEvent(QPaintEvent *event)
{auto rect = event->rect();QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);painter.fillRect(rect,backgroundColor);//绘制刻度painter.save();auto length = (orientation == Qt::Horizontal ? rect.width() : rect.height());painter.setPen(QPen(textAndLineColor,1));painter.setFont(font);if(orientation == Qt::Horizontal){auto height = rect.height();auto shortLine_y = height * 0.75;auto longLine_y = height * 0.5;auto middleLine_y = height * 0.625;auto halfHeight = height / 2;int temp = 0;for(int i = 0;i < length;i+=10){if(temp % 10 == 0)//画长线{painter.drawLine(QPointF(i,middleLine_y),QPointF(i,height));}else if(temp % 5 == 0){painter.drawLine(QPointF(i,longLine_y),QPointF(i,height));painter.drawText(QRectF(i-50,0,100,halfHeight),Qt::AlignCenter | Qt::TextWordWrap,QString::number(i));}else{painter.drawLine(QPointF(i,shortLine_y),QPointF(i,height));}++temp;}}else{auto width = rect.width();auto shortLineWidth = width * 0.25;auto longLineWidth = width * 0.5;auto middleLineWidth = width * 0.375;auto harfWidth = width / 2;int temp = 0;for(int i = 0;i < length;i+=10){if(temp % 10 == 0)//画长线{painter.drawLine(QPointF(middleLineWidth,i),QPointF(0,i));}else if(temp % 5 == 0){painter.drawLine(QPointF(longLineWidth,i),QPointF(0,i));painter.drawText(QRectF(harfWidth,i-50,harfWidth,100),Qt::AlignCenter | Qt::TextWordWrap,QString::number(i));}else{painter.drawLine(QPointF(shortLineWidth,i),QPointF(0,i));}++temp;}}painter.restore();QWidget::paintEvent(event);
}

使用时在构造函数里指定方向:

    RulerWidget w(Qt::Vertical);RulerWidget w2(Qt::Horizontal);

效果:

Qt编写自定义控件:像素刻度尺相关推荐

  1. Qt编写自定义控件29-颜色选取面板

    一.前言 这个控件主要是模仿QColorDialog对话框中的颜色选取面板,提供一个十字形状的标识器,鼠标按下开始选取颜色,移动到哪就选择该处的颜色值,对应右侧颜色条放大显示,本控件的难点就是如何绘制 ...

  2. Qt编写自定义控件3-速度仪表盘

    前言 速度仪表盘,写作之初的本意是用来展示当前测试的网速用的,三色圆环+数码管显示当前速度,Qt自带了数码管控件QLCDNumber,直接集成即可,同时还带有动画功能,其实也可以用在汽车+工业领域等, ...

  3. Qt编写自定义控件14-环形进度条

    前言 环形进度条,用来展示当前进度,为了满足大屏UI的需要特意定制,以前有个叫圆环进度条,不能满足项目需要,只能重新定做,以前的进度间距不能自适应分辨率,而且当前进度对应的反的进度不能单独设置颜色,即 ...

  4. Qt编写自定义控件4-旋转仪表盘

    前言 旋转仪表盘,一般用在需要触摸调节设置值的场景中,其实Qt本身就提供了QDial控件具有类似的功能,本控件最大的难点不在于绘制刻度和指针等,而在于自动计算当前用户按下处的坐标转换为当前值,这个功能 ...

  5. Qt编写自定义控件44-天气仪表盘

    一.前言 天气仪表盘控件是所有控件中唯一一个使用了svg矢量图的控件,各种天气图标采用的矢量图,颜色变换采用动态载入svg的内容更改生成的,其实也可以采用图形字体来做,本次控件为了熟悉下svg在Qt中 ...

  6. Qt编写自定义控件35-GIF录屏控件

    一.前言 在平时的写作过程中,经常需要将一些操作动作和效果图截图成gif格式,使得涵盖的信息更全面更生动,有时候可以将整个操作过程和运行效果录制成MP4,但是文件体积比较大,而且很多网站不便于上传,基 ...

  7. Qt编写自定义控件及插件的使用

    在使用Qt Designer设计窗体界面时,我们可以使用Widget Box里的窗体控件非常方便的绘制界面,比如拖进去一个按钮,一个文本编辑器等.虽然Qt Designer里的控件可以满足我们大部分的 ...

  8. Qt编写自定义控件21-圆弧仪表盘

    一.前言 圆弧仪表盘在整个自定义控件大全中也稍微遇到了技术难点,比如背景透明,如果采用以前画圆形画扇形的方式绘制,肯定很难形成背景透明,需要用到切割,最后换了一种绘制方法,采用绘制圆弧的方式,即使用d ...

  9. Qt编写自定义控件1-汽车仪表盘

    一.前言 汽车仪表盘几乎是qt写仪表盘控件中最常见的,一般来说先要求美工做好设计图,然后设计效果图给到程序员,由程序员根据效果来实现,主要靠贴图,这种方法有个好处就是做出来的效果比较逼真,和真实效果图 ...

最新文章

  1. 怎么安装MYSQL5.0的JDBC驱动
  2. 吐血整理:24种可视化图表优缺点对比,一图看懂!
  3. 《从问题到程序:用Python学编程和计算》——3.4 定义函数
  4. POJ 3225 Help with Intervals(线段树)
  5. zynq 文件系统中加载PL fpga.bit笔记
  6. 天翼云从业认证(4.10)网络直播场景解决方案(CDN)
  7. 操作系统之进程管理:9、进程互斥的硬件实现方法
  8. 我的世界服务器物品解绑定,我的世界更方便控制VIP物品 灵魂绑定插件分享
  9. Function的常用属性和方法
  10. python 正则表达式 \b 大坑
  11. 采购订单暂存和持有相关的问题?
  12. R语言安装及包的使用
  13. matlab卷积神经网络的创建与图片识别
  14. 超实用的桌面收纳盒!
  15. Excel中忽视隐藏行编序号
  16. Spring整合axis2
  17. 纳德拉:没有Excel的世界是无法想象的
  18. java生成唯一订单号
  19. 复旦女神陈果:孤独是一个人的狂欢,在你寂寞时请关注这些公众号充实自己
  20. java游戏 天剑传承,《天剑传承》之无双迷宫攻略

热门文章

  1. LoadRunner如何运行Java脚本
  2. 工作感悟:初识产品经理
  3. 破解计算机密码的各种方法
  4. 云原生架构《一》———全景概述
  5. java初级工程师面试题_初级Java工程师面试所遇面试题
  6. js DOM节点操作之创建、添加、删除和克隆节点
  7. Java中对中文进行字典排序
  8. 永恒python强化材料怎么获得_只狼强化材料怎么得 全强化材料获取方法
  9. 计算机组装与维护----第九次作业
  10. 电脑怎么迁移游戏资源,数据迁移能把游戏数据迁移吗