您的位置:首页 > 编程语言 > Qt开发

QT控件大全 十六 QChartXY

2017-12-08 10:23 260 查看
效果如图:



核心代码:

#ifndef CHARTXY_H
#define CHARTXY_H

#include <QAbstractItemView>
#include <QMouseEvent>
#include "chartxysetting.h"
#include "chartxyrender.h"
#include <qglobal.h>
#include <QtCore>

#define CHARTXY_VERSION 0
#define CHARTXY_REVISION 8

class ChartXY: public QAbstractItemView
{
Q_OBJECT
public:
explicit ChartXY(QWidget *parent=0);

virtual QRect visualRect(const QModelIndex &index) const;
virtual void scrollTo(const QModelIndex &index,ScrollHint hint=EnsureVisible);
virtual QModelIndex indexAt(const QPoint &point) const;

ChartXYSetting &setting(void);

static unsigned int version(void);
static unsigned int revision(void);
protected:
virtual QModelIndex moveCursor(CursorAction cursorAction,Qt::KeyboardModifiers modifiers);
virtual int horizontalOffset() const;
virtual int verticalOffset() const;
virtual bool isIndexHidden(const QModelIndex &index) const;
virtual void setSelection(const QRect &rect,QItemSelectionModel::SelectionFlags command);
virtual QRegion visualRegionForSelection(const QItemSelection &selection) const;

virtual void dataChanged(const QModelIndex &topLeft,const QModelIndex &bottomRight);

virtual void paintEvent(QPaintEvent *event);
virtual void resizeEvent(QResizeEvent *event);
virtual void scrollContentsBy(int dx, int dy);

virtual void mousePressEvent(QMouseEvent *event);
virtual void mouseReleaseEvent(QMouseEvent *event);

signals:

public slots:
void updateChart(void);
private:
ChartXYSetting *m_setting;
ChartXYRender *m_render;
};

#endif // CHARTXY_H


#include "chartxy.h"

ChartXY::ChartXY(QWidget *parent):
QAbstractItemView(parent)
{
m_setting=new ChartXYSetting(this);
m_render=new ChartXYRender(this,m_setting);

//grabMouse(Qt::CrossCursor);
}

QRect	ChartXY::visualRect(const QModelIndex &index) const
{
return(QRect());
}

void ChartXY::scrollTo(const QModelIndex &index,ScrollHint hint)
{
update();
}

QModelIndex ChartXY::indexAt(const QPoint &point) const
{
return(QModelIndex());
}

ChartXYSetting &ChartXY::setting(void)
{
return(*m_setting);
}

unsigned int ChartXY::version(void)
{
return(CHARTXY_VERSION);
}

unsigned int ChartXY::revision(void)
{
return(CHARTXY_REVISION);
}

QModelIndex ChartXY::moveCursor(CursorAction cursorAction,Qt::KeyboardModifiers modifiers)
{
return(QModelIndex());
}

int ChartXY::horizontalOffset() const
{
return(0);
}
int ChartXY::verticalOffset() const

{
return(0);
}

bool ChartXY::isIndexHidden(const QModelIndex &index) const
{
return(false);
}

void ChartXY::setSelection(const QRect &rect,QItemSelectionModel::SelectionFlags command)
{
update();
}

QRegion ChartXY::visualRegionForSelection(const QItemSelection &selection) const
{
return(QRegion());
}

void ChartXY::dataChanged(const QModelIndex &topLeft,const QModelIndex &bottomRight)
{
//qDebug() << "Data is changed " << endl;
QAbstractItemView::dataChanged(topLeft, bottomRight);
updateChart();
}

void ChartXY::paintEvent(QPaintEvent *event)
{
m_render->paint();
}

void ChartXY::resizeEvent(QResizeEvent *event)
{
updateGeometries();
}

void ChartXY::scrollContentsBy(int dx, int dy)
{
}

void ChartXY::mousePressEvent(QMouseEvent *event)
{
if(event->button()==Qt::LeftButton)
{
setCursor(Qt::CrossCursor);
}
}

void ChartXY::mouseReleaseEvent(QMouseEvent *event)
{
setCursor(Qt::ArrowCursor);
}

void ChartXY::updateChart(void)
{
m_setting->scale().calculateLimit(model(),m_setting->grid().horizzontalTick().tickMajor()-1,m_setting->grid().verticalTick().tickMajor()-1);
viewport()->update();
}


源码工程:QQ:609162385
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: