{"id":102,"date":"2018-09-19T09:29:00","date_gmt":"2018-09-19T01:29:00","guid":{"rendered":"https:\/\/www.wangliguang.cn\/?p=102"},"modified":"2025-08-05T09:58:07","modified_gmt":"2025-08-05T01:58:07","slug":"%e5%a6%82%e4%bd%95%e5%9c%a8qtcreator%e9%87%8c2d%e7%bb%98%e5%9b%be","status":"publish","type":"post","link":"https:\/\/wangliguang.cn\/?p=102","title":{"rendered":"\u5982\u4f55\u5728Qt Creator\u91cc2D\u7ed8\u56fe"},"content":{"rendered":"<p>\u5148\u6765\u660e\u786e\u4e00\u4e9b\u57fa\u672c\u7684\u77e5\u8bc6\u3002 <br \/>\n\u9996\u5148\uff0c\u660e\u786e\u8981\u5728\u4ec0\u4e48\u4e0a\u8fdb\u884c\u7ed8\u56fe\u3002\u6839\u636e\u6559\u6750\u300aQt Creator\u5feb\u901f\u5165\u95e8\u300b\uff08\u970d\u4e9a\u98de\u7f16\u8457\uff09\u7684\u7b2c\u5341\u7ae0\u4e0a\u7684\u8bf4\u6cd5\uff0cQt\u4e2d\u63d0\u4f9b\u4e86\u5f3a\u5927\u76842D\u7ed8\u56fe\u7cfb\u7edf\uff0c\u53ef\u4ee5\u4f7f\u7528\u76f8\u540c\u7684API\u5728\u5c4f\u5e55\u4e0a\u548c\u7ed8\u56fe\u8bbe\u5907\u4e0a\u8fdb\u884c\u7ed8\u5236\uff0c\u4e3b\u8981\u57fa\u4e8eQPainter\u3001QPainterDevice\u548cQPainterEngine\u8fd93\u4e2a\u7c7b\u3002 <br \/>\n\u5176\u4e2d\uff0cQPainterDevice\u63d0\u4f9b\u7ed8\u56fe\u8bbe\u5907\uff0c\u4f9bQPainter\u5728\u5176\u4e0a\u9762\u8fdb\u884c\u7ed8\u5236\u3002\u6211\u4eec\u5e38\u7528\u7684QWidget\u5c31\u662f\u5b83\u7684\u5b50\u7c7b\uff0c\u8fd9\u6b21\uff0c\u6211\u4eec\u5c31\u5728QWidget\u4e0a\u7ed8\u56fe\u3002 <br \/>\n\u4e0b\u9762\u7740\u91cd\u4ecb\u7ecd\u51e0\u4e2a\u91cd\u8981\u7684\u5730\u65b9\u3002 <br \/>\n\u4e00\u3001\u91cd\u7ed8\u4e8b\u4ef6\u7684\u5904\u7406\u51fd\u6570 \uff1apaintEvent\uff08\uff09 <br \/>\n\u6211\u4eec\u60f3\u8981\u7ed8\u56fe\uff0c\u5c31\u5fc5\u987b\u5b9e\u73b0paintEvent\uff08\uff09\u51fd\u6570\u3002 <br \/>\n\u4f8b\u5982\uff0c\u6211\u4eec\u8981\u753b\u4e00\u6761\u76f4\u7ebf\uff1a<\/p>\n<pre class=\"prettyprint\"><code class=\"language-C++ hljs scss\">void Widget<span class=\"hljs-value\">::paintEvent(QPaintEvent *)\n{\n    QPainter painter(this);<\/span>\n    painter<span class=\"hljs-class\">.drawLine<\/span>(<span class=\"hljs-function\">QPoint(<span class=\"hljs-number\">0<\/span>, <span class=\"hljs-number\">0<\/span>)<\/span>, <span class=\"hljs-function\">QPoint(<span class=\"hljs-number\">100<\/span>, <span class=\"hljs-number\">100<\/span>)<\/span>);\n}<\/code><\/pre>\n<p>\u5c31\u9700\u8981\u91cd\u5199\u4e00\u4e2apaintEvent\u51fd\u6570\u3002\u5176\u4e2d\uff0c\u91cc\u9762\u7684QPainter painter\u4e00\u7ecf\u521b\u5efa\uff0c\u5c31\u4f1a\u7acb\u5373\u5728\u7ed1\u5b9a\u7684\u8bbe\u5907\u4e0a\u8fdb\u884c\u7ed8\u5236\u3002\u8fd9\u91cc\u9762\u7684this\u4e5f\u5c31\u662f\u5728\u7a0b\u5e8f\u8fd0\u884c\u7684\u65f6\u5019\u5efa\u7acb\u7684QWidget\u5bf9\u8c61\u3002 <br \/>\n\u4e8c\u3001\u7ed8\u56fe\u7528\u7684\u5de5\u5177 <br \/>\n\u7528\u4ec0\u4e48\u7ed8\u56fe\u5462\uff1f\u5c31\u8981\u63d0\u5230\u753b\u7b14\u548c\u753b\u5237\u3002\u753b\u7b14\u4e0e\u753b\u5237\u662fQt\u7ed8\u56fe\u65f6\u975e\u5e38\u91cd\u8981\u7684\u4e1c\u897f\u3002\u753b\u7b14\u7528QPen\u63cf\u8ff0\uff0c\u6765\u7ed8\u5236\u8f6e\u5ed3\u7ebf\uff0c\u800c\u753b\u5237\u7528QBrush\u63cf\u8ff0\uff0c\u7528\u6765\u586b\u5145\u3002 <br \/>\n\u5178\u578b\u7684\u753b\u7b14\u6784\u9020\u51fd\u6570\u5982\u4e0b\uff1a <br \/>\nQPen ( const QBrush &amp; brush, qreal width, Qt::PenStyle style = Qt::SolidLine, Qt::PenCapStyle cap = Qt::SquareCap, Qt::PenJoinStyle join = Qt::BevelJoin\uff09\uff1b <br \/>\n\u5176\u4e2d\u5305\u542b\u4e86\u753b\u7b14\u4f7f\u7528\u7684\u753b\u5237\uff0c\u7ebf\u5bbd\uff0c\u753b\u7b14\u98ce\u683c\uff0c\u753b\u7b14\u7aef\u70b9\u98ce\u683c\uff0c\u753b\u7b14\u8fde\u63a5\u98ce\u683c\u3002 <br \/>\n\u5178\u578b\u7684\u753b\u5237\u6784\u9020\u51fd\u6570\u5982\u4e0b\uff1a <br \/>\nQBrush ( Qt::GlobalColor color, Qt::BrushStyle style = Qt::SolidPattern ) <br \/>\nQBrush \u4e3b\u8981\u5b9a\u4e49\u4e86 QPainter \u7684\u586b\u5145\u6a21\u5f0f\uff08style\uff09\uff0c\u5177\u6709\u7684\u6837\u5f0f\u3001\u989c\u8272\uff08QColor\uff09\u7b49\u3002 <br \/>\n\u6b64\u5916\u8fd8\u53ef\u4ee5\u4f7f\u7528\u7279\u6b8a\u7684\u6e10\u53d8\u6548\u679c\u3002 <br \/>\n\u4e0b\u9762\u4ece\u4e00\u4e2a\u4f8b\u5b50\u5f00\u59cb\uff1a <br \/>\n\u4ee5\u4e0b\u4f8b\u5b50\u9009\u81ea\u300aQt Creator\u5feb\u901f\u5165\u95e8\u300b\uff08\u970d\u4e9a\u98de\u7f16\u8457\uff09\u7684\u7b2c\u5341\u7ae0\uff0c\u9996\u5148\uff0c\u6211\u5728\u5bf9\u5e94\u4ee3\u7801\u7684\u884c\u540e\u505a\u4e86\u7b80\u5355\u6ce8\u91ca\uff0c\u66f4\u7ec6\u7684\u77e5\u8bc6\u70b9\u5199\u5728\u6587\u7ae0\u540e\u9762\u90e8\u5206\u3002<\/p>\n<pre class=\"prettyprint\"><code class=\"language-C++ hljs vala\"><span class=\"hljs-preprocessor\">#include \"widget.h\"<\/span>\n<span class=\"hljs-preprocessor\">#include \"ui_widget.h\"<\/span>\n<span class=\"hljs-preprocessor\">#include <qpainter><\/span>\nWidget::Widget(QWidget *parent) :\n    QWidget(parent),\n    ui(<span class=\"hljs-keyword\">new<\/span> Ui::Widget)\n{\n    ui->setupUi(<span class=\"hljs-keyword\">this<\/span>);\n}\nWidget::~Widget()\n{\n    delete ui;\n}\n<span class=\"hljs-keyword\">void<\/span> Widget::paintEvent(QPaintEvent *)\n{\n    QPainter painter(<span class=\"hljs-keyword\">this<\/span>);<span class=\"hljs-comment\">\/\/\u7ed1\u5b9a\u7ed8\u56fe\u8bbe\u5907<\/span>\n    painter.drawLine(QPoint(<span class=\"hljs-number\">0<\/span>, <span class=\"hljs-number\">0<\/span>), QPoint(<span class=\"hljs-number\">100<\/span>, <span class=\"hljs-number\">100<\/span>));<span class=\"hljs-comment\">\/\/\u753b\u4e00\u6761\u76f4\u7ebf<\/span>\n    <span class=\"hljs-comment\">\/\/\u521b\u5efa\u753b\u7b14<\/span>\n    QPen pen(Qt::green, <span class=\"hljs-number\">5<\/span>, Qt::DotLine, Qt::RoundCap, Qt::RoundJoin);\n    <span class=\"hljs-comment\">\/\/\u4f7f\u7528\u753b\u7b14<\/span>\n    painter.setPen(pen);\n    QRectF rectangle(<span class=\"hljs-number\">70.0<\/span>, <span class=\"hljs-number\">40.0<\/span>, <span class=\"hljs-number\">80.0<\/span>, <span class=\"hljs-number\">60.0<\/span>);<span class=\"hljs-comment\">\/\/\u8303\u56f4<\/span>\n    <span class=\"hljs-keyword\">int<\/span> startAngle = <span class=\"hljs-number\">30<\/span> * <span class=\"hljs-number\">16<\/span>;<span class=\"hljs-comment\">\/\/\u5f00\u59cb\u7684\u503e\u89d2<\/span>\n    <span class=\"hljs-keyword\">int<\/span> spanAngle = <span class=\"hljs-number\">120<\/span> * <span class=\"hljs-number\">16<\/span>;<span class=\"hljs-comment\">\/\/\u753b\u56fe\u7684\u8303\u56f4<\/span>\n    <span class=\"hljs-comment\">\/\/\u7ed8\u5236\u5706\u5f27<\/span>\n    painter.drawArc(rectangle, startAngle, spanAngle);\n    <span class=\"hljs-comment\">\/\/\u91cd\u65b0\u8bbe\u7f6e\u753b\u7b14<\/span>\n    pen.setWidth(<span class=\"hljs-number\">1<\/span>);\n    pen.setStyle(Qt::SolidLine);<span class=\"hljs-comment\">\/\/\u5b9e\u5fc3\u7ebf<\/span>\n    painter.setPen(pen);\n    <span class=\"hljs-comment\">\/\/\u7ed8\u5236\u4e00\u4e2a\u77e9\u5f62<\/span>\n    painter.drawRect(<span class=\"hljs-number\">160<\/span>, <span class=\"hljs-number\">20<\/span>, <span class=\"hljs-number\">50<\/span>, <span class=\"hljs-number\">40<\/span>);\n    <span class=\"hljs-comment\">\/\/ \u521b\u5efa\u753b\u5237<\/span>\n    QBrush brush(QColor(<span class=\"hljs-number\">0<\/span>, <span class=\"hljs-number\">0<\/span>, <span class=\"hljs-number\">255<\/span>), Qt::Dense4Pattern);\n    <span class=\"hljs-comment\">\/\/ \u4f7f\u7528\u753b\u5237<\/span>\n    painter.setBrush(brush);\n    <span class=\"hljs-comment\">\/\/ \u7ed8\u5236\u692d\u5706<\/span>\n    painter.drawEllipse(<span class=\"hljs-number\">220<\/span>, <span class=\"hljs-number\">20<\/span>, <span class=\"hljs-number\">50<\/span>, <span class=\"hljs-number\">50<\/span>);\n    <span class=\"hljs-comment\">\/\/ \u8bbe\u7f6e\u7eb9\u7406<\/span>\n    brush.setTexture(QPixmap(<span class=\"hljs-string\">\"..\/mydrawing\/yafeilinux.png\"<\/span>));\n    <span class=\"hljs-comment\">\/\/ \u91cd\u65b0\u4f7f\u7528\u753b\u5237<\/span>\n    painter.setBrush(brush);\n    <span class=\"hljs-comment\">\/\/ \u5b9a\u4e49\u56db\u4e2a\u70b9<\/span>\n    <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">const<\/span> QPointF points[<span class=\"hljs-number\">4<\/span>] = {\n        QPointF(<span class=\"hljs-number\">270.0<\/span>, <span class=\"hljs-number\">80.0<\/span>),\n        QPointF(<span class=\"hljs-number\">290.0<\/span>, <span class=\"hljs-number\">10.0<\/span>),\n        QPointF(<span class=\"hljs-number\">350.0<\/span>, <span class=\"hljs-number\">30.0<\/span>),\n        QPointF(<span class=\"hljs-number\">390.0<\/span>, <span class=\"hljs-number\">70.0<\/span>)<span class=\"hljs-comment\">\/\/\u5b9a\u4e49\u56db\u4e2a\u70b9\uff0c\u7528\u4ee5\u7ed8\u5236\u591a\u8fb9\u5f62<\/span>\n    };\n    <span class=\"hljs-comment\">\/\/ \u4f7f\u7528\u56db\u4e2a\u70b9\u7ed8\u5236\u591a\u8fb9\u5f62<\/span>\n    painter.drawPolygon(points, <span class=\"hljs-number\">4<\/span>);\n    <span class=\"hljs-comment\">\/\/ \u4f7f\u7528\u753b\u5237\u586b\u5145\u4e00\u4e2a\u77e9\u5f62\u533a\u57df<\/span>\n    painter.fillRect(QRect(<span class=\"hljs-number\">10<\/span>, <span class=\"hljs-number\">100<\/span>, <span class=\"hljs-number\">150<\/span>, <span class=\"hljs-number\">20<\/span>), QBrush(Qt::darkYellow));\n    <span class=\"hljs-comment\">\/\/ \u64e6\u9664\u4e00\u4e2a\u77e9\u5f62\u533a\u57df\u7684\u5185\u5bb9<\/span>\n    painter.eraseRect(QRect(<span class=\"hljs-number\">50<\/span>, <span class=\"hljs-number\">0<\/span>, <span class=\"hljs-number\">50<\/span>, <span class=\"hljs-number\">120<\/span>));\n    <span class=\"hljs-comment\">\/\/ \u7ebf\u6027\u6e10\u53d8\uff0c\u8bbe\u7f6e\u7ebf\u6027\u6e10\u53d8<\/span>\n    QLinearGradient linearGradient(QPointF(<span class=\"hljs-number\">40<\/span>, <span class=\"hljs-number\">190<\/span>), QPointF(<span class=\"hljs-number\">70<\/span>, <span class=\"hljs-number\">190<\/span>));\n    <span class=\"hljs-comment\">\/\/ \u63d2\u5165\u989c\u8272\uff0c\u7ed9\u7ebf\u6027\u6e10\u53d8\u63d2\u5165\u9700\u8981\u7684\u989c\u8272<\/span>\n    linearGradient.setColorAt(<span class=\"hljs-number\">0<\/span>, Qt::yellow);\n    linearGradient.setColorAt(<span class=\"hljs-number\">0.5<\/span>, Qt::red);\n    linearGradient.setColorAt(<span class=\"hljs-number\">1<\/span>, Qt::green);\n    <span class=\"hljs-comment\">\/\/ \u6307\u5b9a\u6e10\u53d8\u533a\u57df\u4ee5\u5916\u7684\u533a\u57df\u7684\u6269\u6563\u65b9\u5f0f<\/span>\n    linearGradient.setSpread(QGradient::RepeatSpread);\n    <span class=\"hljs-comment\">\/\/ \u4f7f\u7528\u6e10\u53d8\u4f5c\u4e3a\u753b\u5237\uff0c\u8bbe\u7f6e\u753b\u5237<\/span>\n    painter.setBrush(linearGradient);\n    painter.drawRect(<span class=\"hljs-number\">10<\/span>, <span class=\"hljs-number\">170<\/span>, <span class=\"hljs-number\">90<\/span>, <span class=\"hljs-number\">40<\/span>);<span class=\"hljs-comment\">\/\/\u753b\u4e00\u4e2a\u77e9\u5f62<\/span>\n    <span class=\"hljs-comment\">\/\/ \u8f90\u5c04\u6e10\u53d8<\/span>\n    QRadialGradient radialGradient(QPointF(<span class=\"hljs-number\">200<\/span>, <span class=\"hljs-number\">190<\/span>), <span class=\"hljs-number\">50<\/span>, QPointF(<span class=\"hljs-number\">275<\/span>, <span class=\"hljs-number\">200<\/span>));<span class=\"hljs-comment\">\/\/\u8bbe\u7f6e\u8f90\u5c04\u6e10\u53d8<\/span>\n    radialGradient.setColorAt(<span class=\"hljs-number\">0<\/span>, QColor(<span class=\"hljs-number\">255<\/span>, <span class=\"hljs-number\">255<\/span>, <span class=\"hljs-number\">100<\/span>, <span class=\"hljs-number\">150<\/span>));<span class=\"hljs-comment\">\/\/\u7ed9\u8f90\u5c04\u6e10\u53d8\u52a0\u989c\u8272<\/span>\n    radialGradient.setColorAt(<span class=\"hljs-number\">1<\/span>, QColor(<span class=\"hljs-number\">0<\/span>, <span class=\"hljs-number\">0<\/span>, <span class=\"hljs-number\">0<\/span>, <span class=\"hljs-number\">50<\/span>));<span class=\"hljs-comment\">\/\/\u7ed9\u8f90\u5c04\u6e10\u53d8\u52a0\u989c\u8272<\/span>\n    painter.setBrush(radialGradient);<span class=\"hljs-comment\">\/\/\u8bbe\u7f6e\u753b\u5237<\/span>\n    painter.drawEllipse(QPointF(<span class=\"hljs-number\">200<\/span>, <span class=\"hljs-number\">190<\/span>), <span class=\"hljs-number\">50<\/span>, <span class=\"hljs-number\">50<\/span>);<span class=\"hljs-comment\">\/\/\u753b\u4e00\u4e2a\u692d\u5706<\/span>\n    <span class=\"hljs-comment\">\/\/ \u9525\u5f62\u6e10\u53d8<\/span>\n    QConicalGradient conicalGradient(QPointF(<span class=\"hljs-number\">350<\/span>, <span class=\"hljs-number\">190<\/span>), <span class=\"hljs-number\">60<\/span>);<span class=\"hljs-comment\">\/\/\u8bbe\u7f6e\u4e00\u4e2a\u9525\u5f62\u6e10\u53d8<\/span>\n    conicalGradient.setColorAt(<span class=\"hljs-number\">0.2<\/span>, Qt::cyan);<span class=\"hljs-comment\">\/\/\u7ed9\u9525\u5f62\u6e10\u53d8\u52a0\u989c\u8272<\/span>\n    conicalGradient.setColorAt(<span class=\"hljs-number\">0.9<\/span>, Qt::black);<span class=\"hljs-comment\">\/\/\u7ed9\u9525\u5f62\u6e10\u53d8\u52a0\u989c\u8272<\/span>\n    painter.setBrush(conicalGradient);<span class=\"hljs-comment\">\/\/\u8bbe\u7f6e\u753b\u5237<\/span>\n    painter.drawEllipse(QPointF(<span class=\"hljs-number\">350<\/span>, <span class=\"hljs-number\">190<\/span>), <span class=\"hljs-number\">50<\/span>, <span class=\"hljs-number\">50<\/span>);<span class=\"hljs-comment\">\/\/\u753b\u4e00\u4e2a\u692d\u5706<\/span>\n    <span class=\"hljs-comment\">\/\/ \u753b\u7b14\u4f7f\u7528\u7ebf\u6027\u6e10\u53d8\u6765\u7ed8\u5236\u76f4\u7ebf\u548c\u6587\u5b57<\/span>\n    painter.setPen(QPen(linearGradient,<span class=\"hljs-number\">2<\/span>));\n    painter.drawLine(<span class=\"hljs-number\">0<\/span>, <span class=\"hljs-number\">280<\/span>, <span class=\"hljs-number\">100<\/span>, <span class=\"hljs-number\">280<\/span>);\n    painter.drawText(<span class=\"hljs-number\">150<\/span>, <span class=\"hljs-number\">280<\/span>, tr(<span class=\"hljs-string\">\"helloQt!\"<\/span>));\n}<\/code><\/pre>\n<p>\u4ee5\u4e0a\u53ef\u4ee5\u770b\u51fa\uff0c\u7ed8\u56fe\u7684\u4e3b\u8981\u6b65\u9aa4\u5c31\u662f\u8bbe\u7f6e\u753b\u7b14\u3001\u753b\u5237\uff0c\u5982\u679c\u9700\u8981\u4f7f\u7528\u7279\u6b8a\u6548\u679c\u90a3\u5c31\u8bbe\u7f6e\u7279\u6b8a\u7684\u6e10\u53d8\uff0c\u7136\u540e\u7ed9\u6e10\u53d8\u52a0\u989c\u8272\uff0c\u6700\u540e\u518d\u5c06\u6e10\u53d8\u8bbe\u7f6e\u5230\u753b\u5237\u91cc\uff0c\u753b\u5237\u8bbe\u7f6e\u5230\u753b\u7b14\u91cc\uff0c\u4f7f\u7528\u753b\u7b14\u7ed8\u56fe\u5c31\u53ef\u4ee5\u4e86\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5148\u6765\u660e\u786e\u4e00\u4e9b\u57fa\u672c\u7684\u77e5\u8bc6\u3002 \u9996\u5148\uff0c\u660e\u786e\u8981\u5728\u4ec0\u4e48\u4e0a\u8fdb\u884c\u7ed8\u56fe\u3002\u6839\u636e\u6559\u6750\u300aQt Creator\u5feb\u901f\u5165\u95e8\u300b\uff08\u970d\u4e9a\u98de\u7f16\u8457\uff09&hellip; <a href=\"https:\/\/wangliguang.cn\/?p=102\" class=\"more-link\">\u7ee7\u7eed\u9605\u8bfb <span class=\"screen-reader-text\">\u5982\u4f55\u5728Qt Creator\u91cc2D\u7ed8\u56fe<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[33],"class_list":["post-102","post","type-post","status-publish","format-standard","hentry","category-qt","tag-qt"],"_links":{"self":[{"href":"https:\/\/wangliguang.cn\/index.php?rest_route=\/wp\/v2\/posts\/102","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wangliguang.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wangliguang.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wangliguang.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wangliguang.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=102"}],"version-history":[{"count":1,"href":"https:\/\/wangliguang.cn\/index.php?rest_route=\/wp\/v2\/posts\/102\/revisions"}],"predecessor-version":[{"id":684,"href":"https:\/\/wangliguang.cn\/index.php?rest_route=\/wp\/v2\/posts\/102\/revisions\/684"}],"wp:attachment":[{"href":"https:\/\/wangliguang.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=102"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wangliguang.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=102"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wangliguang.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=102"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}