《Qt开发》基于QPolarChart的极坐标图绘制
改程序包括以下内容:
- 绘制极坐标图,图中绘制散点
- 实现按键+-缩放,按键上下左右旋转缩放
头文件内容如下,其中加粗部分为添加内容
#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的极坐标图绘制相关推荐
- qt绘制运动物体_手写QT贪吃蛇,小白高薪捷径-Qt开发
1. C/C++初学者的困惑 很多C/C++初学者,自学了很多年,考了很多证,开发水平仍停留在控制台小项目上,就业更是遥遥无期,进退两难. C/C++的最强大的地方,当然是开发高性能框架.高性能服务器 ...
- QT软件开发-基于FFMPEG设计视频播放器-软解图像(一)
QT软件开发-基于FFMPEG设计视频播放器-CPU软解视频(一) https://xiaolong.blog.csdn.net/article/details/126832537 QT软件开发-基于 ...
- Qt Creator开发基于小部件的应用程序
Qt Creator开发基于小部件的应用程序 开发基于小部件的应用程序 代码编辑器集成 管理影像资源 指定Qt Designer的设置 使用设备皮肤预览表单 添加小部件 开发基于小部件的应用程序 Qt ...
- 基于qt开发的智能系统:电子相册,监控摄像头模块,音乐播放器,视频播放器,电子时钟
登录模块 源码请移步 //登录验证按钮函数 void MainWindow::on_loginBtn_clicked() {//获得userNameLEd输入框的文本userNameLEd->t ...
- 基于Qt开发的网络诊断工具
导语: 项目名称:基于Qt开发的网络诊断工具 开发环境:VS2008 QT版本:4.7 数据读入:用户自行选中的.ini配置文件 功能实现:解析.ini文件,实时检测相关的域名连通性以及DNS解析的结 ...
- 【QT/C++】基于QT开发的一款A-SOUL元素的视频播放器(附源码)
[QT/C++]基于QT开发的一款关于A-SOUL的视频播放器(附源码) 前言 一.软件使用说明 1.运行软件的界面如下 2.操作软件的步骤 二.软件设计说明 1.UI界面的设计 2.主代码中的部分函 ...
- 基于QT开发的使用OPC_UA与西门子1200,1500系列PLC通信的工业监控Demo
目录 一,总体介绍 二,需要的软件 三,需要的硬件 四,QT程序代码 五,西门子PLC代码 一,总体介绍 先看一下图1-1的QT运行界面图,界面中服务器地址就是OPC_UA服务器地址,整个项目作用,就 ...
- QT软件开发-基于FFMPEG设计视频播放器-解码音频(三)
QT软件开发-基于FFMPEG设计视频播放器-CPU软解视频(一) https://xiaolong.blog.csdn.net/article/details/126832537 QT软件开发-基于 ...
- QT软件开发-基于FFMPEG设计录屏与rtsp、rtmp推流软件(支持桌面与摄像头)(一)
QT软件开发-基于FFMPEG设计录屏与rtsp.rtmp推流软件(支持桌面与摄像头)(一) https://xiaolong.blog.csdn.net/article/details/126954 ...
最新文章
- 计算机图画大赛作品六年级,小学学生电脑绘画比赛活动方案
- python列表题目_day5.python列表练习题
- 人工智能深度学习Caffe框架介绍,优秀的深度学习架构
- MyEclipse 10(汉化版)安装教程
- 集成学习(期末复习)
- mysql explain中的type列含义和extra列的含义
- 数据库中主键和外键的设计原则
- Error querying database. Cause: java.lang.IllegalArgumentException:Failed to decrypt. 错误解决方案
- 对比损失的PyTorch实现详解
- http断点续传的原理
- php滑动解锁验证码,javascript实现支付宝滑块验证码效果
- 史上最简单的 SpringCloud 教程 | 终章
- wkt文件java解析_WKT文件解析 以及各个投影坐标的wkt参数查询 | 学步园
- 开源文档管理系统mysql_14款开源文档管理系统
- 机工士姆斯塔迪奥分数 20作者 DAI, Longao单位 杭州百腾教育科技有限公司
- 【资料】印度数学家拉马努金
- 智能家居-电热水器工作原理(转载)
- 建立自己的机器人手臂-组装
- 矩阵相乘(Python)
- 一颗椰子糖机器人_椰子糖热量有多高?看完数据后让人避犹不及!