{"id":442,"date":"2009-08-23T22:43:07","date_gmt":"2009-08-23T14:43:07","guid":{"rendered":"http:\/\/www.darksun190.cn\/blog\/?p=442"},"modified":"2009-08-23T22:43:07","modified_gmt":"2009-08-23T14:43:07","slug":"qt-example-analogclock-cei","status":"publish","type":"post","link":"http:\/\/darksun190.cn\/blog\/?p=442","title":{"rendered":"qt example &#8211; analogclock \u6ce8\u91ca"},"content":{"rendered":"<pre>analogclock.h<\/pre>\n<pre style=\"padding-left: 30px;\"><span style=\"font-family: mceinline;\"><span style=\"font-family: mceinline;\">#ifndef ANALOGCLOCK_H\n#define ANALOGCLOCK_H\n\n#include &lt;QWidget&gt;\n\n\/\/! [0]\nclass AnalogClock : public QWidget\n{\n    Q_OBJECT\n\n    public:\n\tAnalogClock(QWidget *parent = 0);\n\n    protected:\n\tvoid paintEvent(QPaintEvent *event);\n};\n\/\/! [0]\n\n#endif<\/span><\/span><\/pre>\n<pre>\u6ca1\u4ec0\u4e48\u597d\u6ce8\u91ca\u7684-_-b<\/pre>\n<pre>analogclock.cpp<\/pre>\n<pre style=\"padding-left: 30px;\">#include &lt;QtGui&gt;\n\n#include \"analogclock.h\"\n\nAnalogClock::AnalogClock(QWidget *parent)\n: QWidget(parent)\n{\n    QTimer *timer = new QTimer(this);\n    connect(timer, SIGNAL(timeout()), this, SLOT(update()));\n    timer-&gt;start(1000);\n    \/\/Qt\u7684\u8ba1\u65f6\u5668\u7c7b\uff0cstart\u8bbe\u5b9a\u89e6\u53d1\u95f4\u9694\uff0c1000\u6beb\u79d2\u5373\u4e00\u79d2timeout\u4e00\u6b21\uff0c\u5c06\u6574\u4e2awidget update\u4e00\u6b21\uff0c\u5373\u91cd\u7ed8\u7a97\u53e3\n\n    setWindowTitle(tr(\"Analog Clock\"));\n    resize(200, 200);\n    \/\/\u8bbe\u5b9a\u6807\u9898\u53ca\u5c3a\u5bf8\n}\n\nvoid AnalogClock::paintEvent(QPaintEvent *)    \/\/\u91cd\u7ed8\u7684\u5b9e\u73b0\n{\n    static const QPoint hourHand[3] = {\n\tQPoint(7, 8),\n\tQPoint(-7, 8),\n\tQPoint(0, -40)\n    };\/\/\u65f6\u9488\u5f62\u72b6\n    static const QPoint minuteHand[3] = {\n\tQPoint(7, 8),\n\tQPoint(-7, 8),\n\tQPoint(0, -70)\n    };\/\/\u5206\u9488\u5f62\u72b6\n\n    QColor hourColor(127, 0, 127);\n    QColor minuteColor(0, 127, 127, 191);\n    \/\/\u989c\u8272\n    int side = qMin(width(), height());\n    QTime time = QTime::currentTime();\n    \/\/Qt\u7684\u65f6\u95f4\u7c7b\uff0c\u83b7\u5f97\u5f53\u65f6\u65f6\u95f4\n\n    QPainter painter(this);\n    painter.setRenderHint(QPainter::Antialiasing);\n    painter.translate(width() \/ 2, height() \/ 2);\n    painter.scale(side \/ 200.0, side \/ 200.0);\n\n    painter.setPen(Qt::NoPen);\n    painter.setBrush(hourColor);\n\n    painter.save();\n    painter.rotate(30.0 * ((time.hour() + time.minute() \/ 60.0)));    \/\/\u65f6\u9488\u65cb\u8f6c\u7684\u89d2\u5ea6\n    painter.drawConvexPolygon(hourHand, 3);    \/\/\u586b\u5145\u989c\u8272\n    painter.restore();\n\n    painter.setPen(hourColor);\n\n    for (int i = 0; i &lt; 12; ++i) {\n\tpainter.drawLine(88, 0, 96, 0);\n\tpainter.rotate(30.0);\n    }\n    \/\/\u753b\u8868\u76d8\u65f6\u9488\u523b\u5ea6\n    painter.setPen(Qt::NoPen);\n    painter.setBrush(minuteColor);    \/\/\u989c\u8272\u662f\u5728\u8fd9\u8bbe\u5b9a\u7684\n\n    painter.save();\n    painter.rotate(6.0 * (time.minute() + time.second() \/ 60.0));    \/\/\u5206\u9488\u65cb\u8f6c\u7684\u89d2\u5ea6\n    painter.drawConvexPolygon(minuteHand, 3);    \/\/\u586b\u5145\u989c\u8272\uff0c\u7528\u5f53\u524d\u7684\u989c\u8272\n    painter.restore();\n\n    painter.setPen(minuteColor);\n\n    for (int j = 0; j &lt; 60; ++j) {\n\tif ((j % 5) != 0)\n\t    painter.drawLine(92, 0, 96, 0);\n\tpainter.rotate(6.0);\n    }\n    \/\/\u753b\u8868\u76d8\u7684\u5206\u9488\u523b\u5ea6<\/pre>\n<pre style=\"padding-left: 30px;\">}<\/pre>\n<pre>main.cpp<\/pre>\n<pre style=\"padding-left: 30px;\">#include &lt;QApplication&gt;\n\n#include \"analogclock.h\"\n\nint main(int argc, char *argv[])\n{\n    QApplication app(argc, argv);\n    AnalogClock clock;\n    clock.show();\n    return app.exec();\n}<\/pre>\n<p>\u6548\u679c\u56fe<\/p>\n<p><a href=\"http:\/\/www.darksun190.cn\/blog\/wp-content\/uploads\/2009\/08\/analogclock.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-443 alignnone\" title=\"analogclock\" src=\"http:\/\/www.darksun190.cn\/blog\/wp-content\/uploads\/2009\/08\/analogclock.jpg\" alt=\"analogclock\" width=\"208\" height=\"227\" \/><\/a><\/p>\n<p>\u7136\u540e\u662f\u6fc0\u52a8\u4eba\u5fc3\u7684\u4e71\u6539\u65f6\u95f4\uff0c\u9996\u5148\u6dfb\u52a0\u4e00\u4e2a\u79d2\u9488\uff0c\u4eff\u7167\u65f6\u9488\u5206\u9488\u5c31\u884c\uff0c\u4e0d\u8fc7\u79d2\u9488\u4e00\u822c\u7ec6\u957f\u4e00\u4e9b\uff0c\u518d\u8bbe\u5b9a\u4e2a\u989c\u8272\uff0c\u5c31\u7070\u7684\u5427<\/p>\n<pre>    static const QPoint secondHand[3] = {\n\tQPoint(3, 8),\n\tQPoint(-3, 8),\n\tQPoint(0, -90)\n    };\n    QColor secondColor(99, 99, 99);<\/pre>\n<p>\u518d\u7136\u540e\u662f\u8981\u753b\u51fa\u6765\uff0c\u5c31\u52a0\u5728\u6700\u540e\u5427<\/p>\n<pre>    painter.setBrush(secondColor);\n    painter.save();\n    painter.setPen(Qt::NoPen);\n    painter.rotate(6.0 * time.second());\n    painter.drawConvexPolygon(secondHand,3);\n    painter.restore();<\/pre>\n<pre>\u6548\u679c\u56fe<\/pre>\n<pre><a href=\"http:\/\/www.darksun190.cn\/blog\/wp-content\/uploads\/2009\/08\/analogclock-11.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-452\" title=\"analogclock-11\" src=\"http:\/\/www.darksun190.cn\/blog\/wp-content\/uploads\/2009\/08\/analogclock-11.jpg\" alt=\"analogclock-11\" width=\"208\" height=\"227\" \/><\/a><\/pre>\n<pre>\u518d\u7136\u540e\u53ef\u4ee5\u5c06\u79d2\u9488\u7684\u79fb\u52a8\u6a21\u62df\u6210\u673a\u68b0\u8868<\/pre>\n<pre>\u9996\u5148\u5c06timer\u7684\u89e6\u53d1\u95f4\u9694\u6539\u4e3a100<\/pre>\n<pre>    timer-&gt;start(100);<\/pre>\n<pre>\u7136\u540e\u628a\u79d2\u9488\u91cd\u7ed8\u6539\u6210<\/pre>\n<pre>    painter.rotate(6.0 * (time.second() + time.msec()\/1000.0 ));<\/pre>\n<pre>\u8fd8\u53ef\u4ee5\u6539\u79d2\u9488\u5f62\u72b6<\/pre>\n<pre>    static const QPoint secondHand[4] = {\n\tQPoint(1, 8),\n\tQPoint(-1, 8),\n\tQPoint(-1, -90),\n\tQPoint(1,-90)\n    };\n    painter.drawConvexPolygon(secondHand,4);<\/pre>\n<pre>\u8bb0\u5f97\u6709\u4eba\u548c\u6211\u8bf4\u8fc7\uff0c\u8f6f\u4ef6\u8fd9\u4e2a\u4e1c\u897f\u592a\u795e\u5947\u4e86\uff0c\u65e0\u8bba\u4ec0\u4e48\u4e1c\u897f\u90fd\u80fd\u6a21\u62df\u51fa\u6765\uff0c\u6211\u6765\u6a21\u62df\u4e00\u4e0b\u53cc\u8868\u76d8\u5427-_-b<\/pre>\n<pre>\u9996\u5148\u65b0\u5efa\u4e00\u4e2apainter2<\/pre>\n<pre>    QPainter painter2(this);\n    painter2.setRenderHint(QPainter::Antialiasing);\n    painter2.translate(width() \/ 4, height() \/ 8 * 5);    \/\/\u5e73\u79fb\u5230\u5de6\u504f\u4e0b\n    painter2.scale(side \/ 600.0, side \/ 600.0);    \/\/\u7efd\u653e\u6bd4\u4f8b\u662f\u521a\u624d\u76841\/3\n    painter2.setPen(Qt::NoPen);\n    painter2.setBrush(secondColor);\n    painter2.save();\n    painter2.rotate(6.0 * (time.second() + time.msec()\/1000.0 )); \/\/\u8fd9\u91cc\u90fd\u662f\u4e00\u6837\u7684\n    painter2.drawConvexPolygon(secondHand,4);\n    painter2.restore();\n\n    painter2.setPen(secondColor);\n    for (int j = 0; j &lt; 60; ++j) {\n\tpainter2.drawLine(92, 0, 96, 0);\n        painter2.rotate(6.0);\n    }\n    \/\/\u753b\u4e2a\u5c0f\u8868\u76d8<\/pre>\n<p>\u6548\u679c\u56fe<\/p>\n<p><a href=\"http:\/\/www.darksun190.cn\/blog\/wp-content\/uploads\/2009\/08\/analogclock-2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-455\" title=\"analogclock-2\" src=\"http:\/\/www.darksun190.cn\/blog\/wp-content\/uploads\/2009\/08\/analogclock-2.jpg\" alt=\"analogclock-2\" width=\"208\" height=\"227\" \/><\/a><\/p>\n<p>\u5b9e\u5728\u5f88\u4e11-_-b\uff0c\u51d1\u4e4e\u770b\u5427\u3002<\/p>\n<p>\u4e09\u8868\u76d8+\u9006\u8df3<\/p>\n<pre>    QPainter painter2(this);\n    painter2.setRenderHint(QPainter::Antialiasing);\n    painter2.translate(width() \/ 4, height() \/ 8 * 5);\n    painter2.scale(side \/ 600.0, side \/ 600.0);\n    painter2.setPen(Qt::NoPen);\n    painter2.setBrush(secondColor);\n    painter2.save();\n    if(time.second()&lt;30)\n\tpainter2.rotate(6.0 * (time.second() + time.msec()\/1000.0 ));\n    else if(time.second()==30 &amp;&amp; time.msec()&lt;550)\n\tpainter2.rotate(180 - 36.0 * time.msec()\/100.0);\n\n    painter2.drawConvexPolygon(secondHand,4);\n    painter2.restore();\n\n    painter2.setPen(secondColor);\n    painter2.rotate(270);\n    for (int j = 0; j &lt; 30; ++j) {\n\tpainter2.drawLine(92, 0, 96, 0);\n        painter2.rotate(6.0);\n    }\n\n    QPainter painter3(this);\n    painter3.setRenderHint(QPainter::Antialiasing);\n    painter3.translate(width() \/ 4 * 3, height() \/ 8 * 3);\n    painter3.scale(side \/ 600.0, side \/ 600.0);\n    painter3.setPen(Qt::NoPen);\n    painter3.setBrush(secondColor);\n    painter3.save();\n    if(time.second()&gt;30)\n\tpainter3.rotate(360 - (6.0 * (time.second()-30 + time.msec()\/1000.0 )));\n    else if (time.second()==0 &amp;&amp; time.msec()&lt;550)\n\tpainter3.rotate(180 + 36.0 * time.msec()\/100.0);\n    painter3.drawConvexPolygon(secondHand,4);\n    painter3.restore();\n    painter3.setPen(secondColor);\n    painter3.rotate(90);\n    for (int j = 0; j &lt; 30; ++j) {\n\tpainter3.drawLine(92, 0, 96, 0);\n        painter3.rotate(6.0);\n    }<\/pre>\n<p>\u6548\u679c\u56fe<\/p>\n<p><a href=\"http:\/\/www.darksun190.cn\/blog\/wp-content\/uploads\/2009\/08\/analogclock-3.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-457\" title=\"analogclock-3\" src=\"http:\/\/www.darksun190.cn\/blog\/wp-content\/uploads\/2009\/08\/analogclock-3.jpg\" alt=\"analogclock-3\" width=\"208\" height=\"227\" \/><\/a><\/p>\n<p>\u6211\u5b9e\u5728\u6709\u591f\u65e0\u804a\u7684-_-b\uff0c\u505a\u8fd9\u4e48\u4e2a\u96be\u770b\u7684\u4e1c\u897f\u51fa\u6765-_-b<\/p>\n","protected":false},"excerpt":{"rendered":"<p>analogclock.h #ifndef ANALOGCLOCK_H #define ANALOGCLOCK &hellip; <a href=\"http:\/\/darksun190.cn\/blog\/?p=442\" class=\"more-link\">\u7ee7\u7eed\u9605\u8bfb<span class=\"screen-reader-text\">\u201cqt example &#8211; analogclock \u6ce8\u91ca\u201d<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-442","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"http:\/\/darksun190.cn\/blog\/index.php?rest_route=\/wp\/v2\/posts\/442","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/darksun190.cn\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/darksun190.cn\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/darksun190.cn\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/darksun190.cn\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=442"}],"version-history":[{"count":0,"href":"http:\/\/darksun190.cn\/blog\/index.php?rest_route=\/wp\/v2\/posts\/442\/revisions"}],"wp:attachment":[{"href":"http:\/\/darksun190.cn\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=442"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/darksun190.cn\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=442"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/darksun190.cn\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=442"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}