• 大小: 4KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-13
  • 语言: 其他
  • 标签: Qt  坐标轴  

资源简介

该控件继承QWidget, 实现了左右上下四种形式的坐标轴控件。 可以设置固定间隔或自动选择间隔 可以设置最小间隔 开放一个槽来动态调整坐标轴的范围 处理了边缘刻度的显示 /************************************************************************ * 版权所有 (C) 2012-2015, liang1057@yahoo.com.cn 类声明: 坐标轴控件 ************************************************************************/ /** @brief 坐标轴控件 * * @details 坐标轴控件 只有刻度和数字,数字可以隐藏(用来显示其他需要显示的刻度值) */ class uiAxis : public QWidget { Q_OBJECT public: /** @brief 坐标轴类型 * * @details 坐标轴类型 */ enum AXISTYPE{ LEFT_AXIS = 0, TOP_AXIS, RIGHT_AXIS, BOTTOM_AXIS }; /** @brief 构造函数 */ uiAxis(AXISTYPE type = BOTTOM_AXIS, QWidget *parent = 0); /** @brief 析构函数 */ ~uiAxis(void); /** @brief 设置坐标轴的范围 */ void setScop(double minValue, double maxValue); /** @brief 获取坐标轴的范围 */ void getScop(double& minValue,double& maxValue); /** @brief 获取坐标轴的范围 */ double getMinValue(); double getMaxValue(); /** @brief 设置坐标轴的类型 */ void setAxisType(AXISTYPE type); /** @brief 坐标轴的类型 */ AXISTYPE getAxisType(); /** @brief 设置最小刻度(小刻度的最小间隔) */ void setMinInterval(double value); /** @brief 设置自动间隔 */ void setAutoScale(bool val=true); /** @brief 设置固定间隔 */ void setSettedScale(bool val=true); /** @brief 设置坐标轴的绘制范围, 像素值 */ void setBoundary(int left, int right, int top, int bottom); void getBoundary(int& left, int& right, int& top, int& bottom);

资源截图

代码片段和文件信息

#include 
#include “QsGui/Gui/uiAxis.h“


uiAxis::uiAxis( QWidget *parent /*= 0*/AXISTYPE type)
:QWidget(parent)
{
    m_minValue = -10; 
    m_maxValue = 10;
    m_hasMinInterval = false;
    m_minInterval = 1;
    m_left= 0;
    m_right = 0;
    m_top = 0;
    m_bottom = 0;
    m_lineLength = 10;
    m_axisText = ““;

    m_axisType = type;
    m_isAutoScale = true;
    setMinimumSize(40 40);
}
uiAxis::~uiAxis(void)
{
}

void uiAxis::paintEvent( QPaintEvent *event )
{
    paintAxis();
}

void uiAxis::setScop( double minValue double maxValue )
{
    m_minValue = minValue;
    m_maxValue = maxValue;
    generateAxis();
}

void uiAxis::getScop( double& minValuedouble& maxValue )
{
    minValue = m_minValue;
    maxValue = m_maxValue;
}

double uiAxis::getMinValue()
{
    return m_minValue;
}

double uiAxis::getMaxValue()
{
    return m_maxValue;
}

void uiAxis::setAxisType( AXISTYPE type )
{
    m_axisType = type;

//     if(m_axisType == BOTTOM_AXIS || m_axisType == TOP_AXIS)
//     {
//         setMinimumHeight(30);
//         setMaximumHeight(100);
//     }
//     else
//     {
//         setMinimumWidth(50);
//         setMaximumWidth(100);
//     }
}

uiAxis::AXISTYPE uiAxis::getAxisType()
{
    return m_axisType;
}

void uiAxis::setMinInterval( double value )
{
    m_minInterval = value;
    m_hasMinInterval = true;
}

void uiAxis::setBoundary( int left int right int top int bottom )
{
    m_left = left;
    m_right = right;
    m_top = top;
    m_bottom = bottom;
}

void uiAxis::getBoundary( int& left int& right int& top int& bottom )
{
    left = m_left;
    right = m_right;
    top = m_top;
    bottom = m_bottom;
}

void uiAxis::setAxisText( QString txt )
{
    m_axisText = txt;
}

void uiAxis::onMinMaxChanged( double minValue double maxValue )
{
    setScop(minValue maxValue);
    update();
}

void uiAxis::setTextVisible( bool val )
{
    m_textVisible = val;
    update();
}

void uiAxis::setAxisTextVisible( bool val )
{
    m_axisVisible = val;
    update();
}

QList uiAxis::getNPos()
{
    return m_nPos;
}

QList uiAxis::getDPos()
{
    return m_dPos;
}

void uiAxis::generateAxis()
{
    double isMinMax = 1; // 如果是min    if (m_maxValue        isMinMax = -1;
    else if(m_maxValue==m_minValue) 
        return;  // 

    if(m_axisType == BOTTOM_AXIS || m_axisType == TOP_AXIS)
        axisLength = width() - m_left - m_right;
    else
        axisLength = height() - m_top - m_bottom;

    if (m_isAutoScale) // 如果自动取值的话
        calcAutoScale();
    else
        calcSettedScale();

    if (dDelta ==0)
        return;


    float posStart = (dStart-m_minValue)* axisLength/(m_maxValue-m_minValue);

    switch (m_axisType)
    {
    case LEFT_AXIS:
            m_pStart = QPointF(width()-m_right posStart); // 左坐标轴的刻度与右侧对齐
    

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      11117  2013-05-06 12:07  uiAxis.cpp

     文件       3477  2013-05-06 12:09  uiAxis.h

----------- ---------  ---------- -----  ----

                14594                    2


评论

共有 条评论