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 自定义窗口绘制正弦曲线的更多相关文章

  1. QT自定义窗口(模拟MainWindow)

    在这里自定义窗口是通过继承于QFrame,内部分为上下两部分,上半部分就是标题栏,下面是窗口的具体内容.上下两部分通过布局固定位置.最后窗口的各种鼠标拖动,缩放,等操作通过添加鼠标事件来完成一个窗口的 ...

  2. Qt自定义窗口部件

    QtDesigner自定义窗口部件有两种方法:改进法(promotion)和插件法(plugin)   改进法   1.改进法之前,要先写好子类化QSpinBox后的HexspinBox.h和Hexs ...

  3. QT自定义窗口

    qt 中允许自定义窗口控件,使之满足特殊要求, (1)可以修改其显示,自行绘制 (2)可以动态显示 (3)可以添加事件,支持鼠标和键盘操作 自定义控件可以直接在QtDesigner里使用,可以直接加到 ...

  4. qt中窗口绘制——图片的绘制

    在qt 中,QPixmap 用于表示一张图片,支持png,jpg格式的加载. QPixmap pm("c:/test.png"); 或者 QPixmap pm; pm.load(& ...

  5. qt 自定义窗口显示鼠标划过的轨迹

    鼠标事件分为四种: 1.按下 2.抬起 3.移动 4.双击 鼠标事件继承与QWidget void mouseDoubleClickEvent(QMouseEvent *event) void mou ...

  6. paip.提升用户体验---c++ qt自定义窗体(1)---标题栏的绘制

    源地址:http://blog.csdn.net/attilax/article/details/12343625 paip.提升用户体验---c++ qt自定义窗体(1)---标题栏的绘制 效果图: ...

  7. QT笔记之自定义窗口拖拽移动

    1.QT自定义标题栏,拖拽标题栏移动窗口(只能拖拽标题,其他位置无法拖拽) 方法一: 转载:http://blog.sina.com.cn/s/blog_4ba5b45e0102e83h.html . ...

  8. Qt入门(19)——自定义窗口部件

    我们介绍可以画自己的第一个自定义窗口部件.我们也加入了一个有用的键盘接口.我们添加了一个槽:setRange().        void setRange( int minVal, int maxV ...

  9. WPF绘制自定义窗口

    原文:WPF绘制自定义窗口 WPF是制作界面的一大利器,下面就用WPF模拟一下360的软件管理界面,360软件管理界面如下: 界面不难,主要有如下几个要素: 窗体的圆角 自定义标题栏及按钮 自定义状态 ...

随机推荐

  1. loj2324 「清华集训 2017」小 Y 和二叉树

    https://loj.ac/problem/2324 太智障,一开始以为中序遍历的第一个点一定是一个叶子,想了个贪心.然而,手算了一下,第一个点都过不了啊. input 5 2 3 4 1 3 3 ...

  2. TZ_13_Hystix的熔断器

    1.作用:当服务繁忙时,如果服务出现异常,不是粗暴的直接报错,而是返回一个友好的提示,虽然拒绝了用户的访问,但是会返回一个结果. 熔断器的三种状态: Closed:关闭状态(断路器关闭),所有请求都正 ...

  3. wamp 添加pear

    1.下载pear http://pear.php.net/go-pear.phar 2.安装 在目录 D:\wamp\bin\php\php5.5.12 新建文件夹pear,将文件go-pear.ph ...

  4. jeecg流程梳理学习

    jeecg 流程梳理 角色admin 管理员 fgld学校分管领导 bgs学校办公室 xbld系部领导 xbky系部科员jxky bmld部门领导 发文申请applyUserIdadmin${assi ...

  5. 洛谷P1877 [HAOI2012]音量调节 [2017年4月计划 动态规划05]

    P1877 [HAOI2012]音量调节 题目描述 一个吉他手准备参加一场演出.他不喜欢在演出时始终使用同一个音量,所以他决定每一首歌之前他都需要改变一次音量.在演出开始之前,他已经做好一个列表,里面 ...

  6. 举例分析private的作用【c/c++学习】

    抛砖引玉: c++中private的用处 我知道我们可以用 public 中的值,把private中的数据给提出来,但是还是搞不懂private该怎么用,或者说在一个具体程序中,private有什么用 ...

  7. PhpSpreadsheet处理表格2

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...

  8. Html5知识点以及兼容性

    什么的HTNL5? HTML5 是最新的 HTML 标准. HTML5 是专门为承载丰富的 web 内容而设计的,并且无需额外插件. HTML5 拥有新的语义.图形以及多媒体元素. HTML5 提供的 ...

  9. 【JZOJ3617】【ZJOI2014】力

    ╰( ̄▽ ̄)╭ 对于100%的数据,n≤100000;0<qi<1,000,000,000. (⊙ ▽ ⊙) 令ri=1i2, 设Fj=∑j−1i=0qi∗rj−1−i,Gj=∑j−1i= ...

  10. IDEA 创建文件夹总默认根节点问题解决

    上面是文件夹结构显示,如果勾掉,就是按层级显示,空目录不会自动折叠成一行 原文地址;https://blog.csdn.net/huangjunwei6/article/details/7150755 ...