改程序包括以下内容:

  1. 绘制极坐标图,图中绘制散点
  2. 实现按键+-缩放,按键上下左右旋转缩放

头文件内容如下,其中加粗部分为添加内容

#ifndef POLARCHARTDEMO_H

#define POLARCHARTDEMO_H

#include <QtWidgets/QWidget>

#include "ui_polarchartdemo.h"

#include <QtCharts>

#include <qlayout.h>

class PolarChartDemo : public QWidget

{

Q_OBJECT

public:

PolarChartDemo(QWidget *parent = 0);

~PolarChartDemo();

private:

Ui::PolarChartDemoClass ui;

    QChartView *chartView;

    QPolarChart *chart;

    void drawPolarChart();

    void keyPressEvent(QKeyEvent *event);

};

#endif // POLARCHARTDEMO_H

源文件内容如下

#include "polarchartdemo.h"

const qreal angularMin = 0;

const qreal angularMax = 360;

const qreal radialMin = 0;

const qreal radialMax = 100;

PolarChartDemo::PolarChartDemo(QWidget *parent)

: QWidget(parent)

{

ui.setupUi(this);

ui.widget->setFocusPolicy(Qt::StrongFocus);//widget必须设置为Qt::StrongFocus

drawPolarChart();

}

PolarChartDemo::~PolarChartDemo()

{

}

void PolarChartDemo::drawPolarChart()

{

//准备QChartView对象显示chart

chartView = new QChartView(ui.widget);

chartView->setContentsMargins(0, 0, 0, 0);

chartView->setRenderHint(QPainter::Antialiasing);

chartView->setFocusPolicy(Qt::NoFocus);  //chartView必须设置为Qt::NoFocus

//准备极坐标对象

chart = new QPolarChart();

chart->layout()->setContentsMargins(0, 0, 0, 0);

chart->setMargins(QMargins(0, 0, 0, 0));

chart->setTheme(QChart::ChartThemeBrownSand);

chartView->setChart(chart);

chart->setFocusPolicy(Qt::NoFocus);    //chart必须设置为Qt::NoFocus

//准备散点序列

QScatterSeries *series1 = new QScatterSeries();

series1->setName("scatter");

series1->setMarkerShape(QScatterSeries::MarkerShapeRectangle);  //散点样式只有圆圈和方块

series1->setMarkerSize(8);

series1->setColor(QColor(0,150,0));

series1->setBorderColor(QColor(0,0,200));

for (int i = angularMin; i <= angularMax; i += 20)

series1->append(i, (i / radialMax) * 20.0);

//将散点序列添加到chart对象

chart->addSeries(series1);

//准备坐标轴对象

QValueAxis *angularAxis = new QValueAxis();

angularAxis->setTickCount(9); // First and last ticks are co-located on 0/360 angle.

angularAxis->setLabelFormat("%.1f");

angularAxis->setShadesVisible(true);

angularAxis->setShadesBrush(QBrush(QColor(249, 249, 255)));

chart->addAxis(angularAxis, QPolarChart::PolarOrientationAngular);

QValueAxis *radialAxis = new QValueAxis();

radialAxis->setTickCount(5);

radialAxis->setLabelFormat("%d");

chart->addAxis(radialAxis, QPolarChart::PolarOrientationRadial);

radialAxis->setRange(radialMin, radialMax);

angularAxis->setRange(angularMin, angularMax);

series1->attachAxis(radialAxis);

series1->attachAxis(angularAxis);

QHBoxLayout *hLayout = new QHBoxLayout(this);

hLayout->setContentsMargins(0, 0, 0, 0);

hLayout->addWidget(chartView);

ui.widget->setLayout(hLayout);

}

//按键事件

void PolarChartDemo::keyPressEvent(QKeyEvent *event)

{

switch (event->key()) {

case Qt::Key_Plus:

chart->zoomIn();

break;

case Qt::Key_Minus:

chart->zoomOut();

break;

case Qt::Key_Left:

chart->scroll(-1.0, 0);

break;

case Qt::Key_Right:

chart->scroll(1.0, 0);

break;

case Qt::Key_Up:

chart->scroll(0, 1.0);

break;

case Qt::Key_Down:

chart->scroll(0, -1.0);

break;

}

}

特别提示:

开发过程遇到无法识别上下左右按键的问题,网上的回答五花八门,汇总在一起,终于把问题解决了。

1设置widget接收按键焦点的方式

 ui.widget->setFocusPolicy(Qt::StrongFocus);

2 设置其他子部件不接受按键焦点

chartView->setFocusPolicy(Qt::NoFocus);

chart->setFocusPolicy(Qt::NoFocus);

《Qt开发》基于QPolarChart的极坐标图绘制相关推荐

  1. qt绘制运动物体_手写QT贪吃蛇,小白高薪捷径-Qt开发

    1. C/C++初学者的困惑 很多C/C++初学者,自学了很多年,考了很多证,开发水平仍停留在控制台小项目上,就业更是遥遥无期,进退两难. C/C++的最强大的地方,当然是开发高性能框架.高性能服务器 ...

  2. QT软件开发-基于FFMPEG设计视频播放器-软解图像(一)

    QT软件开发-基于FFMPEG设计视频播放器-CPU软解视频(一) https://xiaolong.blog.csdn.net/article/details/126832537 QT软件开发-基于 ...

  3. Qt Creator开发基于小部件的应用程序

    Qt Creator开发基于小部件的应用程序 开发基于小部件的应用程序 代码编辑器集成 管理影像资源 指定Qt Designer的设置 使用设备皮肤预览表单 添加小部件 开发基于小部件的应用程序 Qt ...

  4. 基于qt开发的智能系统:电子相册,监控摄像头模块,音乐播放器,视频播放器,电子时钟

    登录模块 源码请移步 //登录验证按钮函数 void MainWindow::on_loginBtn_clicked() {//获得userNameLEd输入框的文本userNameLEd->t ...

  5. 基于Qt开发的网络诊断工具

    导语: 项目名称:基于Qt开发的网络诊断工具 开发环境:VS2008 QT版本:4.7 数据读入:用户自行选中的.ini配置文件 功能实现:解析.ini文件,实时检测相关的域名连通性以及DNS解析的结 ...

  6. 【QT/C++】基于QT开发的一款A-SOUL元素的视频播放器(附源码)

    [QT/C++]基于QT开发的一款关于A-SOUL的视频播放器(附源码) 前言 一.软件使用说明 1.运行软件的界面如下 2.操作软件的步骤 二.软件设计说明 1.UI界面的设计 2.主代码中的部分函 ...

  7. 基于QT开发的使用OPC_UA与西门子1200,1500系列PLC通信的工业监控Demo

    目录 一,总体介绍 二,需要的软件 三,需要的硬件 四,QT程序代码 五,西门子PLC代码 一,总体介绍 先看一下图1-1的QT运行界面图,界面中服务器地址就是OPC_UA服务器地址,整个项目作用,就 ...

  8. QT软件开发-基于FFMPEG设计视频播放器-解码音频(三)

    QT软件开发-基于FFMPEG设计视频播放器-CPU软解视频(一) https://xiaolong.blog.csdn.net/article/details/126832537 QT软件开发-基于 ...

  9. QT软件开发-基于FFMPEG设计录屏与rtsp、rtmp推流软件(支持桌面与摄像头)(一)

    QT软件开发-基于FFMPEG设计录屏与rtsp.rtmp推流软件(支持桌面与摄像头)(一) https://xiaolong.blog.csdn.net/article/details/126954 ...

最新文章

  1. 计算机图画大赛作品六年级,小学学生电脑绘画比赛活动方案
  2. python列表题目_day5.python列表练习题
  3. 人工智能深度学习Caffe框架介绍,优秀的深度学习架构
  4. MyEclipse 10(汉化版)安装教程
  5. 集成学习(期末复习)
  6. mysql explain中的type列含义和extra列的含义
  7. 数据库中主键和外键的设计原则
  8. Error querying database. Cause: java.lang.IllegalArgumentException:Failed to decrypt. 错误解决方案
  9. 对比损失的PyTorch实现详解
  10. http断点续传的原理
  11. php滑动解锁验证码,javascript实现支付宝滑块验证码效果
  12. 史上最简单的 SpringCloud 教程 | 终章
  13. wkt文件java解析_WKT文件解析 以及各个投影坐标的wkt参数查询 | 学步园
  14. 开源文档管理系统mysql_14款开源文档管理系统
  15. 机工士姆斯塔迪奥分数 20作者 DAI, Longao单位 杭州百腾教育科技有限公司
  16. 【资料】印度数学家拉马努金
  17. 智能家居-电热水器工作原理(转载)
  18. 建立自己的机器人手臂-组装
  19. 矩阵相乘(Python)
  20. 一颗椰子糖机器人_椰子糖热量有多高?看完数据后让人避犹不及!

热门文章

  1. P5727 【深基5.例3】冰雹猜想
  2. 自定义指令简介及用法
  3. 麦芒6手机一键root,华为麦芒6怎么使用
  4. 在2020年,向SpaceX学习如何建造太空飞船!
  5. casio科学计算机算mod余数,如何计算卡西欧fx-991ES计算中的Mod b
  6. 模型设计有趣软件学习
  7. 历年毕业设计情况总结
  8. 超炫酷罗盘时钟分享(步骤简单、可直接复制)
  9. 相声文本《我是黑社会》--郭德纲、于谦
  10. echarts 设置仪表盘数字的位置_全新数字高尔夫独具的特色!外观前卫紧跟潮流!...