QT提升控件示例

QT提升控件示例_第1张图片


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.csdn.net/detail/z397164725/6202933

你可能感兴趣的:(QT提升控件示例)