qt 自定义窗口绘制正弦曲线
circlewidget.h
- #ifndef CIRCLAWIDGET_H
- #define CIRCLAWIDGET_H
- #include <QFrame>
- #include<QVector>
- #include<QMouseEvent>
- class CircleWidget:public QFrame
- {
- Q_OBJECT
- public:
- CircleWidget(QWidget *parent);
- ~CircleWidget();
- private:
- void paintEvent(QPaintEvent *event);
- public:
- void Adjust(int period, int grain, int radius);
- QPoint origin(); // 坐标原点位置
- QPoint toCoord(QPoint p); // 将GUI窗口的点(x,y)转换成坐标系统里的点
- QPoint fromCoord(QPoint p); // 将坐标系内的(x,y)转成GUI的坐标
- private:
- int m_period, m_grain, m_radius;
- };
- #endif // CIRCLAWIDGET_H
circlewidget.cpp
- # include"circlewidget.h"
- #include<QPainter>
- #include<QDebug>
- #include<math.h>
- CircleWidget::CircleWidget(QWidget *parent):QFrame(parent)
- {
- m_period = ; //周期
- m_grain = ; //粒度
- m_radius = ; // 振幅
- }
- CircleWidget::~CircleWidget()
- {
- }
- void CircleWidget::paintEvent(QPaintEvent *event)
- {
- QPainter painter(this);
- int width = this->width();
- int height = this->height();
- QRect rect(,, width, height);
- // 设置背景为黑色
- painter.setBrush(QBrush(QColor(0x00,0x00, 0x00)));
- painter.drawRect(rect);
- painter.setPen(QPen(QColor(, , ))); // 设置线条为绿色
- QPoint o = origin();
- painter.drawLine(QPoint(, o.y()), QPoint(width, o.y())); // x轴
- painter.drawLine(QPoint(o.x(), ), QPoint(o.x(), height));// y轴
- // 正弦曲线: 从坐标原点,向左、向右伸展
- QPoint p1(,);
- for(int x=; x<width/; x+=m_grain)
- {
- // y=sin(x)
- double angle = (double) x / m_period * * 3.1415926;
- double y = m_radius * sin(angle);
- QPoint p2(x, y);
- // 右侧
- painter.drawLine(fromCoord(p1), fromCoord(p2));
- // 左侧
- QPoint base(,);
- painter.drawLine(fromCoord(base-p1), fromCoord(base-p2));
- p1 = p2;
- }
- }
- void CircleWidget::Adjust(int period, int grain, int radius)
- {
- m_period = period;
- m_grain = grain;
- m_radius = radius;
- update(); // 更新重绘
- }
- QPoint CircleWidget::origin()
- {
- QRect r = this->rect();
- return r.center();
- }
- // 将GUI窗口的点(x,y)转换成数学坐标系统里的点
- QPoint CircleWidget::toCoord(QPoint p)
- {
- // 圆心
- QPoint o = this->origin();
- QPoint result = p - o;
- result.setY( - result.y()); // y坐标反转
- return result;
- }
- // 将数学坐标系内的(x,y)转成GUI的坐标
- QPoint CircleWidget::fromCoord(QPoint p)
- {
- // 圆心
- QPoint o = this->origin();
- p.setY( - p.y()); // y坐标反转
- return p + o;
- }
结果:
qt 自定义窗口绘制正弦曲线的更多相关文章
- QT自定义窗口(模拟MainWindow)
在这里自定义窗口是通过继承于QFrame,内部分为上下两部分,上半部分就是标题栏,下面是窗口的具体内容.上下两部分通过布局固定位置.最后窗口的各种鼠标拖动,缩放,等操作通过添加鼠标事件来完成一个窗口的 ...
- Qt自定义窗口部件
QtDesigner自定义窗口部件有两种方法:改进法(promotion)和插件法(plugin) 改进法 1.改进法之前,要先写好子类化QSpinBox后的HexspinBox.h和Hexs ...
- QT自定义窗口
qt 中允许自定义窗口控件,使之满足特殊要求, (1)可以修改其显示,自行绘制 (2)可以动态显示 (3)可以添加事件,支持鼠标和键盘操作 自定义控件可以直接在QtDesigner里使用,可以直接加到 ...
- qt中窗口绘制——图片的绘制
在qt 中,QPixmap 用于表示一张图片,支持png,jpg格式的加载. QPixmap pm("c:/test.png"); 或者 QPixmap pm; pm.load(& ...
- qt 自定义窗口显示鼠标划过的轨迹
鼠标事件分为四种: 1.按下 2.抬起 3.移动 4.双击 鼠标事件继承与QWidget void mouseDoubleClickEvent(QMouseEvent *event) void mou ...
- paip.提升用户体验---c++ qt自定义窗体(1)---标题栏的绘制
源地址:http://blog.csdn.net/attilax/article/details/12343625 paip.提升用户体验---c++ qt自定义窗体(1)---标题栏的绘制 效果图: ...
- QT笔记之自定义窗口拖拽移动
1.QT自定义标题栏,拖拽标题栏移动窗口(只能拖拽标题,其他位置无法拖拽) 方法一: 转载:http://blog.sina.com.cn/s/blog_4ba5b45e0102e83h.html . ...
- Qt入门(19)——自定义窗口部件
我们介绍可以画自己的第一个自定义窗口部件.我们也加入了一个有用的键盘接口.我们添加了一个槽:setRange(). void setRange( int minVal, int maxV ...
- WPF绘制自定义窗口
原文:WPF绘制自定义窗口 WPF是制作界面的一大利器,下面就用WPF模拟一下360的软件管理界面,360软件管理界面如下: 界面不难,主要有如下几个要素: 窗体的圆角 自定义标题栏及按钮 自定义状态 ...
随机推荐
- _mysql_exceptions.IntegrityError: (1062, "Duplicate entry, Python操作MySQL数据库,插入重复数据
[python] view plain copy sql = "INSERT INTO test_c(id,name,sex)values(%s,%s,%s)" param = ...
- wpf绑定元素属性
- java数字金额转中文大写
package com.example.convert; import java.text.DecimalFormat; import java.util.Scanner; /** * 金额转换 * ...
- java-异常处理2
一 编译时异常和运行时异常的区别 java认为如果你的程序有问题,你应该让调用者知道. 例如:面包,长毛了.用户去买了,用户可能会挂 .应该在面包上贴上标签(异常). java 如果在函数内抛出Exc ...
- linux引导和登录/注销配置文件
引导和登录/注销 /etc/issue & /etc/issue.net 这些文件由 mingetty(和类似的程序)读取,用来向从终端(issue)或通过 telnet 会话(issue.n ...
- ubuntu安装搜狗输入法后无法使用goland的快捷键 ctrl+alt+B
安装了搜狗拼音后,其快捷键ctrl+alt+b会启动软键盘,造成与其他编辑器快捷键的冲突. 为了禁止使用ctrl+alt+b启动软键盘,可以: 1. 在搜狗拼音输入法选择设置 2. 高级设置 3. 高 ...
- 微信小程序-- WXML语法
页面数据 test.js test.wxml 运行结果:
- 对于MD5加密处理方式
来源:http://blog.51cto.com/xqtesting/1924977 但有时候我们请求的参数可能需要加密,比如登录接口中的密码可能需要经过md5加密这时候怎么处理呢? 这种方法比较简单 ...
- SVN failed: 405 Method Not Allowed
SVN update 时,错误:PROPFIND request on '/svn/xxxx' failed: 405 Method Not Allowed. 解决办法如下: 第一步:查看SVN服务器 ...
- 从0开始学习 GitHub 系列之「01.初识 GitHub
转载:http://blog.csdn.net/googdev/article/details/52787516 1. 写在前面 我一直认为 GitHub 是程序员必备技能,程序员应该没有不知道 Gi ...