QT窗体 AnalogClock

窗体 

         窗体是指用于创建用户界面的一系列可是元素,如:按钮,菜单,滚动条,列表框,消息框等。

         Qt提供了一系列的标准窗体,使用这些窗体,可以为应用程序创建图形用户界面。QT窗体分为内建窗体定制窗体,内建窗体是由QWidget类及其子类提供的,而制定窗体则是通过派生内建窗体并重写其虚函数来是实现的。窗体可以有任意多的子窗体,没有父窗体的叫顶层窗体,这类窗体通常在桌面环境的任务栏中有启动入口。Qt中任何一个窗体都可以作为一个顶层窗体,也可以作为一个子窗体。

内建窗体

        内建窗体一般有:QLineEdit:用来输入一行文本;QcheckBox用来启用或者警用简单的独立设置;QSpinBox和QSlider用来指定数量;
QRadioButton 用来启用或者禁用互斥的设置。。。。。

制定窗体

    指定窗体是指通过从QWidget或者其子类继承而来的窗体。开发人员可以开发自己的窗体和对话框。例如:
analogclock.h 文件
 
#include 
  
<QWidget> 
class AnalogClock:public QWidget
{
public:
    AnalogClock(QWidget *parent=0);
protected:
    void paintEvent(QPaintEvent *);
};
 
analogclock.cpp   
#include "analogclock.h"
#include <QtGui>
#include <qmath.h>
AnalogClock::AnalogClock(QWidget *parent):QWidget(parent)
{
   QTimer *timer=new QTimer(this);
   connect(timer,SIGNAL(timeout()),this,SLOT(update()));//当调用update()时,程序会启动paintEvent();
   timer->start(1000);//设置定时器。每一秒中刷新一次
   setWindowTitle(tr("Analog Clock"));
   resize(200,200);//设置窗口的大小
}
//重新绘制窗体函数
void AnalogClock::paintEvent(QPaintEvent *)
{
    static const QPoint hourHand[3]={
        QPoint(7,8),QPoint(-7,8),QPoint(0,-40)};
    static const QPoint minuteHand[3]={
        QPoint(7,8),QPoint(-7,8),QPoint(0,-70)};
    QColor hourColor(127,0,127);
    QColor minuteColor(0,127,127);
    int side =qMin(width(),height());
    QTime time=QTime::currentTime();
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);
    painter.translate(width()/2.0,height()/2.0);//画图转移到窗体中央
    painter.scale(side/200.0,side/200.0);
    //
    painter.setPen(Qt::NoPen);
    painter.setBrush(hourColor);
    painter.save();
    painter.rotate(30.0*(time.hour()+time.minute()/60.0));//画图旋转30度*小时
    painter.drawConvexPolygon(hourHand,3);//绘制时针
    painter.restore();
    painter.setPen(hourColor);
    //绘制12个刻度
    for(int i=0;i<12;++i)
     {
        painter.rotate(30.0);
        painter.drawLine(88,0,96,0);
      }
    painter.setPen(Qt::NoPen);
    painter.setBrush(minuteColor);
    painter.save();
    painter.rotate(6.0*(time.minute()+time.second()/60.0));//每一分钟转6度
    painter.drawConvexPolygon(minuteHand,3);
    painter.restore();
   painter.setPen(minuteColor);

//绘制60个小刻度
   for(int j=0;j<60;j++)
   {
       if((j%5)!=0)  
           painter.drawLine(92,0,96,0);
       painter.rotate(6.0);
   }
}

main.cpp
#include <QtGui/QApplication>
#include "mainwindow.h"
#include "analogclock.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    AnalogClock clock;
    clock.show();//clock作为一个父窗体
    return a.exec();
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值