自定义时间选择控件
//用画图方式画出来
void DateDialog::paintHours()
{
QPainter painter(m_hourLabel);
painter.setPen(Qt::white);
painter.setFont(m_font);
for (int i = 0 ; i < 4; i ++) {
int posY =m_drawHourTextStartPosY + i * m_drawTextDistance + m_fontHeight * i;
int _hour = m_hours - 1 + i;
if(_hour > 23)
_hour = 0;
else if( _hour < 0)
_hour = 23;
if(posY > m_drawTextEndPosY)
break;
painter.drawText(2,posY,m_fontWidth,m_fontHeight + 5,Qt::AlignHCenter,QString::number(_hour));
}
painter.end();
}
void DateDialog::paintMinutes()
{
QPainter painter(m_minuteLabel);
painter.setPen(Qt::white);
painter.setFont(m_font);
for (int i = 0 ; i < 4; i ++) {
int posY =m_drawMinutesTextStartPosY + i * m_drawTextDistance + m_fontHeight * i;
int _minutes = m_minutes - 1 +i;
if(_minutes > 59)
_minutes = 0;
else if(_minutes < 0)
_minutes = 59;
if(posY > m_drawTextEndPosY)
break;
painter.drawText(2,posY,m_fontWidth,m_fontHeight + 5,Qt::AlignHCenter,QString::number(_minutes));
}
painter.end();
}
//判断是鼠标滚轮还是鼠标拖动
bool DateDialog::eventFilter(QObject *obj, QEvent *event)
{
if(obj == m_hourLabel && event->type() == QEvent::Paint)
{
paintHours();
}
else if(obj == m_hourLabel && event->type() == QEvent::MouseButtonPress)
{
QMouseEvent * e =(QMouseEvent *) event;
m_mousePressPosY = e->pos().ry();
}
else if(obj == m_hourLabel && event->type() == QEvent::MouseMove)
{
QMouseEvent * e =(QMouseEvent *) event;
m_mouseMovePosY = e->pos().ry();
m_drawHourTextStartPosY = m_mouseMovePosY - m_mousePressPosY;
int moveTime = 0;
if(m_drawHourTextStartPosY < 0)
{
moveTime = -1 * m_drawHourTextStartPosY / (m_fontHeight );
for (int i = 0; i < moveTime ; i++) {
if(–m_hours < 0)
m_hours = 23;
}
m_drawHourTextStartPosY = 0;
m_mousePressPosY -= moveTime * m_fontHeight;
}
else
{
moveTime = m_drawHourTextStartPosY / (m_fontHeight + 5);
m_drawHourTextStartPosY = 0;
for (int i = 0; i< moveTime; i++) {
if(++m_hours > 23)
m_hours = 0;
}
m_mousePressPosY += moveTime * m_fontHeight;
}
update();
}
}