绘制坐标图型
来源:互联网 发布:软件外包人员管理制度 编辑:程序博客网 时间:2024/04/29 06:32
=====================================Widget.h=====================================
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
namespace Ui {
class Widget;
}
class Widget :public QWidget {
Q_OBJECT
public:
Widget(QWidget *parent = 0);
~Widget();
protected:
virtualvoid changeEvent(QEvent *e);
virtualbool eventFilter(QObject *watched, QEvent *e);
void paintOnWidget(QWidget *w);
private:
Ui::Widget *ui;
};
#endif// WIDGET_H
=====================================Widget.cpp=====================================
#include"Widget.h"
#include"ui_Widget.h"
#include<QtGui/QPainter>
Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) {
ui->setupUi(this);
ui->widget->installEventFilter(this);
}
Widget::~Widget() {
delete ui;
}
void Widget::changeEvent(QEvent *e) {
QWidget::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}
bool Widget::eventFilter(QObject *watched, QEvent *e) {
if (watched == ui->widget) {
if (e->type() == QEvent::Paint) {
paintOnWidget(ui->widget);
returntrue;
}
}
return QWidget::eventFilter(watched, e);
}
void Widget::paintOnWidget(QWidget *w) {
QPainter painter(w);
QFontMetrics metrics = painter.fontMetrics();
int textHeight = metrics.ascent() + metrics.descent();
int leftWidth = metrics.width(tr("9000")) +5;
int rightWidth = metrics.width(tr("(日)"));
int width = w->size().width() - leftWidth - rightWidth;
int height = w->size().height() -3 * textHeight;
// 绘制外框
painter.drawRect(0,0, w->size().width() -1, w->size().height() -1);
// 移动坐标系
//painter.translate(inset * 2, ui->yearWidget->size().height() - inset);
painter.translate(leftWidth, 1.75 * textHeight + height);
int totalCount =9000; // 默认每年收入9000件衣服
int count =10; // 分成10成
float deltaX = width /12.0f; // x坐标上每分的宽度
float deltaY = (float)height / count;// y坐标上每分的宽度
// 画横坐标
painter.drawLine(0,0, width, 0);
for (int i =1; i <= 12; ++i) {
QString month = tr("%1月").arg(i);
int stringWidth = metrics.width(month);
// 绘制坐标刻度
painter.drawLine(deltaX * i, 0, deltaX * i, 4);
// 绘制坐标处的月
int monthX = deltaX * (i -1) + ((deltaX - stringWidth) / 2);
painter.drawText(monthX, textHeight, month);
}
// 画纵坐标
painter.drawLine(0,0, 0, -height);
painter.drawText(-metrics.width(tr("(件)")),
-(deltaY * count + textHeight /2 + metrics.descent()),
tr("(件)"));
for (int i =1; i <= count; ++i) {
QString value = QString("%1").arg(i * totalCount / count);
int stringWidth = metrics.width(value);
// 绘制坐标刻度
painter.drawLine(-4, -i * deltaY,0, -i * deltaY);
// 绘制坐标值
//painter.drawText(-stringWidth - 4, -i * deltaY + stringHeight / 2, value);
painter.drawText(-stringWidth - 4, -(deltaY * i + textHeight / 2 - metrics.ascent()), value);
}
// // 绘制每个月收到的服饰
// painter.setBrush(Qt::BDiagPattern);
// for (int i = 0; i < yearList.size(); ++i) {
// painter.setPen(Qt::black);
// int fineryCount = yearList.at(i); // 第i + 1个月收到的服饰件数
// int h = fineryCount / (float)totalCount * height;
// painter.drawRect(deltaX * i + 2, 0, deltaX - 4, -h);
//
// // 绘制收到的服饰件数
// QString fineryString = QString("%1").arg(fineryCount);
// int stringWidth = metrics.width(fineryString);
//
// if (h > height) {
// h = height;
// }
//
// painter.setPen(Qt::red);
// //painter.drawText(deltaX * i + (deltaX - stringWidth) / 2, -(h + metrics.descent()), fineryString);
// }
}
- 绘制坐标图型
- GDI+绘制极坐标图
- 绘制坐标图,折线图
- MATLAB绘制双坐标图
- GDI+绘制极坐标图、雷达图
- R语言绘制双坐标图
- php Jpgraph绘制简单的X-Y坐标图
- php Jpgraph绘制复杂的X-Y坐标图
- php Jpgraph绘制复杂的X-Y坐标图
- 九、matplotlib系列---pyplot极坐标图的绘制
- 【python图像处理】python绘制极坐标图
- C#动态坐标图
- jfree chart 坐标图
- iText7画坐标图
- python 三维坐标图
- R语言绘制双坐标图直方图与折线的结合
- VC画坐标图 求助!!!
- 画坐标图及曲线
- 关系约束 Constraint
- java读取properties属性文件
- 元芳,财要这样理!时尚达人的理财方案
- PYTHON第一行注释小记
- 管理类-绩效
- 绘制坐标图型
- adobe reader 在 ubuntu 下不能运行
- BackingBean直接调用AMImpl中的方法
- 开源平台OpenStack运筹帷幄:实战学习技巧
- 异常
- gis开发工作分类
- 淘宝技术发展
- centos6.2 RPM安装mysql配置方法
- ucosii_win_1 -- 在windows环境的建立