自定义时间控件

自定义时间选择控件
在这里插入图片描述
//用画图方式画出来

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();
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值