QT提升控件示例


QT提升QGraphicsView控件类简单示例,提升后控件动态显示时钟,效果如上图。


提升类cpp代码实现如下:

注意注意:QPainter mypainter(this->viewport()); this->viewport()->update();!!!

#include "QMyGraphicsView.h"
#include <QTimer>
#include <QMessageBox>


QMyGraphicsView::QMyGraphicsView(QWidget *parent)
: QGraphicsView(parent)
{
pw = parent;
curtime = QTime::currentTime();
QTimer * ptimer = new QTimer( this );
connect(ptimer,SIGNAL(timeout()),SLOT(updatatime()));
ptimer->start(500);
}


QMyGraphicsView::~QMyGraphicsView()
{


}
static int k = 0;


void QMyGraphicsView::updatatime()
{
QTime time = QTime::currentTime();
if (time.second() != curtime.second())
{
//k++;
//if (k%10 == 0)
//{
// QMessageBox::information(this,"ee","dd");
//}
curtime = time;
//QT控件提升刷新问题:
//update();//刷新主界面
this->viewport()->update();//刷新当前控件
}
}


void QMyGraphicsView::paintEvent(QPaintEvent *event)
{
QPainter mypainter(this->viewport());
mypainter.setPen(QPen(QColor(255,0,0),2,Qt::DotLine,Qt::RoundCap));
mypainter.setRenderHint(QPainter::Antialiasing);//抗锯齿
drawclock(&mypainter,curtime);
}


void QMyGraphicsView::drawclock(QPainter *painter,QTime time)
{
//画布设置
painter->setBrush(QColor(255,0,0));
painter->setWindow(-600,-600,1200,1200);
QRect rc = painter->viewport();
int mind = QMIN(rc.width(),rc.height());
painter->setViewport(rc.left()+(rc.width()-mind)/2,rc.top()+(rc.height()-mind)/2,mind,mind);
//时针
QPolygonF *ptList = new QPolygonF;
ptList->append(QPointF(0,20));
ptList->append(QPointF(-20,0 ));
ptList->append(QPointF( 0,-300));
ptList->append(QPointF(20,0));
painter->save();
painter->rotate(30*(time.hour()%12) + time.minute()/2 );
painter->drawConvexPolygon(*ptList);
painter->restore();
//分针
ptList->clear();
ptList->append(QPointF(0,10));
ptList->append(QPointF(-10,0));
ptList->append(QPointF(0,-400));
ptList->append(QPointF(10, 0));
painter->save();
painter->rotate((time.minute())*6);
painter->drawConvexPolygon(*ptList);
painter->restore();
//秒针
ptList->clear();
ptList->append(QPointF(0,5));
ptList->append(QPointF(-5,0));
ptList->append(QPointF(0,-500));
ptList->append(QPointF(5,0));
painter->save();
painter->rotate((time.second())*6);
painter->drawConvexPolygon(*ptList);
painter->restore();
//表盘
painter->save();
for ( int i=0; i<12; i++ ) 
{
painter->drawLine( 440,0, 460,0 );
painter->rotate( 30 );
}
painter->restore();
//结点
painter->drawEllipse(QPoint(0,0),10,10);
}


源码下载:http://download.youkuaiyun.com/detail/z397164725/6202933

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值