#include "keywidget.h" #include #include #include #include #include #include #include Q_LOGGING_CATEGORY(flapp, "app.key") KeyWidget::KeyWidget(QWidget *parent) : IWidget(parent),m_fd(-1) { } KeyWidget::~KeyWidget() { if(m_fd >=0) { ::close(m_fd); } } void KeyWidget::loadData(const QDomElement &head, const QDomElement &body) { m_devName = head.attribute("devName"); QString config = head.attribute("config"); QDomElement e = body.firstChildElement(config); for(int i=0; iupdate(); if(m_devName.isEmpty() || m_keys.isEmpty()) { qCDebug(flapp) <<"please config key"; return ; } m_fd = open(m_devName.toLocal8Bit().data(), O_RDONLY | O_NONBLOCK); if(m_fd <0 ) { qCDebug(flapp) <update(); break; } } }); } QString KeyWidget::id() { return "key"; } void KeyWidget::paintEvent(QPaintEvent *e) { Q_UNUSED(e) int count = m_keys.size(); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); if(count !=0) { qreal avgWidth = width()/count; painter.setPen(Qt::gray); for(int i=0; ifont(); f.setPointSize(15); painter.setFont(f); painter.setPen(Qt::blue); } QRectF rect(i*avgWidth, 0, avgWidth, height()-150); QRectF r = painter.boundingRect(rect, name, QTextOption(Qt::AlignCenter)); painter.drawText(r, name); QPointF center(rect.x() + avgWidth/2, rect.height()/2); qreal minValue = qMin(avgWidth, rect.height()); qreal perfaceValue = qMin(minValue, 120.0); QPen pen; pen.setWidth(3); pen.setColor(QColor(30, 144,255)); painter.setPen(pen); painter.drawEllipse(center, perfaceValue/2-5, perfaceValue/2-5); painter.restore(); } } QString text = "Please Press the physical key of the development board"; QRect r(0, height()-150, width(), 150); QRectF rect =painter.boundingRect(r, text, QTextOption(Qt::AlignHCenter)); painter.setPen(QColor(37, 37, 37)); painter.drawText(rect, text); } void KeyWidget::resizeEvent(QResizeEvent *e) { Q_UNUSED(e) this->update(); }