QT菜鸟入门第四弹:模拟时钟例程中的六个新家伙

模拟时钟的程序中用到了6个我们新接触的东西:

1. QPaintEvent  绘画事件

2. QTimer       定时器

3. QPoint       点

4. QColor       颜色

5. QTime        时间

6. QPainter     绘画者

下面我们针对每一个分别作出粗浅的理解解释分析……

QPaintEvent

QPaintEvent是个类,继承于QEvent,包含了绘画的事件。

当控件本身更新的时候,绘画事件会发送到控件,对于实例来讲,这种事情一般是遮住他的控件移动了,导致其需要重绘。

事件包含了一个region()需要更新,还有一一个rect(),rect是这个区域的边框。这两个都是需要提供的,因为许多控件不能使用region,这样的话rect就比rgion().boudingRect()更快了。

下面提到了自动剪切的事情

在一个paint event过程中,绘画被剪切到region()中。Qt的绘画系统执行剪切,并且独立于任何一个可能应用于QPainter用来在绘画设备上进行绘画的剪切。

结果就是由QPainter::clipRegion()返回给新构建的QPainter的值不会影响到绘画系统使用的剪切区域

QTimer

QTimer是个类,提供了重复的和一次性的定时器

QTimer类为定时器提供了一个高层编程接口。使用它的时候,创建一个QTimer,连接它的timeout()信号到适当的槽上,然后调用start(),然后它就会按照不变的间隔区触发timerout()信号。模拟时钟上的例子:

QTimer *timer = new QTimer(this);

connect(timer, SIGNAL(timeout()), this, SLOT(update()));

timer->start(1000);

然后update()槽每秒被触发一次。

我们也可以设置定时器让它只被触发一次,调用setSingleShot(true).也可以使用静态的QTimer::SingleShot()函数来调用一个槽,在指定一个间隔之后:

QTimer::singleShot(200, this, SLOT(updateCaption()));

在多线程程序中,你可以使用QTimer在任一个具有事件循环的线程中。为了在非GUI的线程中开始一个事件循环,可以使用QThread::exec(),QT使用定时器的线程亲和力(thread affinity)来检测哪个线程需要触发timeout()信号。因为如此,你必须在一个线程里开始,结束定时器;它不能在另外的线程中开始一个定时器。

作为一个特殊的例子,一个QTimer用一个值为0的timeout将会马上time out,在窗口系统时间队列中被处理的所有事件。这可以用来做很繁重的工作,当提供一个很短暂的用户界面的时候:

QTimer *timer = new QTimer(this);

connect(timer, SIGNAL(timerout()), this, SLOT(processOneThing()));

timer->start();

processOneThing()将会从此以后被重复的调用。它应给能够快速的返回,以便Qt可以处理分配事件给控件并且当它完成工作的时候马上停掉定时器。这是在GUI应用程序中实现大量工作的一种传统解决方式;多线程现在许多平台上都使用了,我们期望零毫秒QTimer逐步的能被QThread替代掉。

下面的帮助文档还讲到了精度以及它的替代函数,这里就不慢慢翻译了。

QPoint

QPoint是一个类,定义了一个点,用整数。

一个点指定了x坐标和y坐标,可以通过x(),y()函数来访问。isNull()函数返回真值,当x,y都为0的时候。坐标可以通过set(),setY()函数设置,或者rx(),ry()函数将会返回坐标系的引用。(允许直接修改)

给出一个点p,下面的语句是等价的

QPoint p;

p.setX(p.x() + 1);

p += QPoint(1,0)

p.rx()++;

一个QPoint对象也可以被用作一个向量:加减都定义为向量运算。也可以被int或qreal进行乘除。

另外,QPoint类提供了manhattanLength()函数,这个曼哈顿函数返回两数的平方和的平方根。

最后QPoint对象可以像流一样的被比较。

QColor

QColor是一个类,提供颜色,基于RGB,HSV或者CMYK的值。

颜色系统就不解释了,东西太复杂了,QColor构造函数是基于RGB的,要转换成其他的颜色制式,用toHsv()或者toCmyk()函数。

QTime

QTime是一个类,提供时钟时间。

QTime对象包含一个时钟,比如时分秒毫秒等。它可以从当前i同事中读取当前时间,测量一段时间。它还提供了比较时间的函数,通过添加毫秒更改时间的函数。

QTime使用24小时制的时间格式,没有上午下午的概念。不想QDateTime,QTime不知道时区或者DST时间。DST是daylight savings time 就是夏时制,改作息时间用的。

QTime对象一般通过给出的时分秒毫秒来创建,或者使用静态函数currentTime(),创建一个QTime对象,包含了系统本地时间。注意,精度取决于系统,不是所有的系统都提供1毫秒的精度。

hour(),minute(),second()和msec()函数用来访问时间的时分秒毫秒。同样的信息由toString()函数提供文本格式。

QTime提供了全部的操作来比较两个QTime对象。一个早一些的时间被认为是小的。

addSecs(),addMSecs()函数可以使用。于此对应的两个时间之间可以用secsTo(),mescsTo()。

QTime可以用来测量时间间隔,使用start(),restart(),elapsed()函数。

QPainter

QPainter是一个类,提供了底层的在控件或者其他可绘制设备上的绘画能力。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwxfsf.html