模拟时钟例程

QT菜鸟入门第三弹:模拟时钟例程
分类: QT 2011-03-09 11:42 870人阅读 评论(3) 收藏 举报

根据http://doc.qt.nokia.com/4.7/widgets-analogclock.html这上面的讲解,我们开始进行稍微复杂一些的程序的编写了。

这个程序里面我们用到了需要自己编写类来实现一个控件了。

而且这个类还被独立为单独的文件。

不多说先,直接贴代码。


view plaincopy to clipboardprint?
#include<QApplication>   
#include"analogclock.h"   
/* 包含头文件 */  
int main(int argc, char *argv[])  
{  
    QApplication app(argc, argv);  
    /* 定义一个类的实例 */  
    AnalogClock clock;  
    /* 显示这个实例 */  
    clock.show();  
    return app.exec();  
}  
#include<QApplication> #include"analogclock.h" /* 包含头文件 */ int main(int argc, char *argv[]) { QApplication app(argc, argv); /* 定义一个类的实例 */ AnalogClock clock; /* 显示这个实例 */ clock.show(); return app.exec(); }  

 


view plaincopy to clipboardprint?
#ifndef ANALOGCLOCK_H   
#define ANALOGCLOCK_H   
#include<QWidget>   
/* 创建了一个类,用公有的派生类型,从QWidget派生来的 */  
class AnalogClock:public QWidget  
{  
    Q_OBJECT  
public:  
    /* 构造函数 */  
    AnalogClock(QWidget *parent = 0);  
protected:  
    /* 号称是覆盖掉了原来Widget中的这个函数,重新实现了功能 */  
    void paintEvent(QPaintEvent *event);  
};  
#endif // ANALOGCLOCK_H  
#ifndef ANALOGCLOCK_H #define ANALOGCLOCK_H #include<QWidget> /* 创建了一个类,用公有的派生类型,从QWidget派生来的 */ class AnalogClock:public QWidget { Q_OBJECT public: /* 构造函数 */ AnalogClock(QWidget *parent = 0); protected: /* 号称是覆盖掉了原来Widget中的这个函数,重新实现了功能 */ void paintEvent(QPaintEvent *event); }; #endif // ANALOGCLOCK_H  

 


view plaincopy to clipboardprint?
#include<QtGui>   
#include "analogclock.h"   
/* 构造函数的实现,当创建新的对象的时候就会调用构造函数 */  
AnalogClock::AnalogClock(QWidget *parent):QWidget(parent)  
{  
    /* 建造一个定时器 */  
    QTimer *timer = new QTimer(this);  
    /* 把定时器的超时中断连接到这个类的更新动作上 */  
    connect(timer, SIGNAL(timeout()),this,SLOT(update()));  
    /* 设置定时器的属性 */  
    timer->start(1000);  
    setWindowTitle(tr("Analog Clock"));  
    resize(200, 200);  
}  
  
/* paintEvent事件实现函数,触发条件为需要重绘的时候, 
   比如从被遮挡到需要显示,或者被调用update的时候 */  
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, 191);  
    /* QT自带函数,返回两个数的最小值 */  
    int side = qMin(width(), height());  
    /* 获取当前时间 */  
    QTime time = QTime::currentTime();  
    /* 
        在this这个可绘画设备上创建一个绘画者 
        设置渲染,用反锯齿效果 
        用一个重载函数转换一下坐标系 
        缩放一下这个坐标系 
    */  
    QPainter painter(this);  
    painter.setRenderHint(QPainter::Antialiasing);  
    painter.translate(width()/2, height()/2);  
    painter.scale(side/200.0, side/200.0);  
    /* 用一个重载函数设置一下画笔的类型,NoPen就是没有线 
       再用一个重载函数设置一下笔刷的颜色,用默认类型 
    */  
    painter.setPen(Qt::NoPen);  
    painter.setBrush(hourColor);  
    painter.save(); //保存当前的绘画者状态   
    //用给出的角度旋转坐标系   
    painter.rotate(30.0*((time.hour()+time.minute()/60.0)));  
    //用线把点连起来   
    painter.drawConvexPolygon(hourHand, 3);  
    //恢复当前的绘画者状态   
    painter.restore();  
    painter.setPen(hourColor);  
    /* 画代表小时的线 */  
    for (int i = 0; i < 12; ++i) {  
        painter.drawLine(88, 0, 96, 0);  
        painter.rotate(30.0);  
    }  
    //下面画分钟的过程是上面的重复,只是分针的颜色用到了透明度   
    painter.setPen(Qt::NoPen);  
    painter.setBrush(minuteColor);  
    painter.save();  
    painter.rotate(6.0*(time.minute()+time.second()/60.0));  
    painter.drawConvexPolygon(minuteHand, 3);  
    painter.restore();  
    painter.setPen(minuteColor);  
    /* 画代表分钟的线 */  
    for (int j = 0; j < 60; ++j) {  
        if((j % 5) != 0) {  
            painter.drawLine(92, 0, 96,0);  
        }  
        painter.rotate(6.0);  
    }  
}  

STM32模拟串口例程是指在STM32单片机中使用软件方法模拟实现串口通信功能的一段代码。在STM32单片机中,通常会有几个硬件串口,但有时候可能会需要更多的串口接口。这时,我们可以使用软件方法实现模拟串口的功能。 在模拟串口例程中,我们首先需要定义两个GPIO引脚来模拟发送和接收线路,可以选择STM32单片机上的任意GPIO引脚。然后,我们需要编写相应的代码来实现串口的发送和接收功能。 在发送方面,我们可以使用一个定时器来产生串口的波特率时钟。通过软件的方式,将要发送的数据通过GPIO引脚模拟串口的发送线路。我们可以使用位操作来控制GPIO引脚的电平状态,模拟发送的高低电平信号。 在接收方面,我们需要使用外部中断来检测接收线路发生的电平变化。当检测到接收线路有电平变化时,我们可以通过位操作读取GPIO引脚的状态,获取到接收到的数据。然后,我们可以将接收到的数据存储在一个缓冲区中,等待进一步的处理。 需要注意的是,由于模拟串口是使用软件方法实现的,所以在高波特率和大数据量的情况下,可能会影响到系统的性能和稳定性。因此,在选择使用模拟串口时,需要根据具体的应用场景和需求来做出权衡。 综上所述,STM32模拟串口例程是一段代码,通过软件方法模拟实现串口通信功能。通过定义GPIO引脚和编写相应的代码,可以实现串口的发送和接收功能。但需要注意在一些特定的应用场景中可能会影响到系统性能和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值