資源簡介
該控件繼承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
- 上一篇:Fireworks cs5 SN
- 下一篇:騰訊通飛鴿傳書插件ipmsgplugin
評論
共有 條評論