#include "fballwidget.h" #include #include #include #include #include #include #include #include FBallWidget::FBallWidget(QWidget *parent) : QWidget(parent) ,m_nMemOcc(20) { setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::Tool); setAttribute(Qt::WA_TranslucentBackground); m_press = false; m_bg.load(":/images/background.png"); QPixmap handle; handle.load(":/images/handle.png"); QPixmap handlePress; handlePress.load(":/images/handlePress.png"); m_handle = new QCursor(handle, 0, 0); m_handlePress = new QCursor(handlePress, 0, 0); this->setFixedSize(150, 62); setCursor(*m_handle); int screenWidth = QApplication::desktop()->screenGeometry().width(); int screenHeight = QApplication::desktop()->screenGeometry().height(); this->move(screenWidth - 42, screenHeight * 0.618); connect(this, SIGNAL(notifyExitSoftSig()), this, SLOT(OnCloseSlot())); //动画延迟,否则会有抖动 m_timer = new QTimer(this); connect(m_timer, SIGNAL(timeout()), this, SLOT(OnBallHideSlot())); QTimer* timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(OnCountSlot())); timer->start(500); } void FBallWidget::mousePressEvent(QMouseEvent *event) { if(event->button() == Qt::LeftButton) { m_press = true; setCursor(*m_handlePress); } m_point = event->globalPos() - pos(); } void FBallWidget::mouseReleaseEvent(QMouseEvent *) { setCursor(*m_handle); m_press = false; } void FBallWidget::mouseMoveEvent(QMouseEvent *event) { if(m_press) { int screenWidth = QApplication::desktop()->screenGeometry().width(); QPoint move_pos = event->globalPos(); QPoint tarPos = move_pos - m_point; if(tarPos.x() + this->width() > screenWidth) { tarPos.setX(screenWidth - this->width()); } move(tarPos); } } void FBallWidget::mouseDoubleClickEvent(QMouseEvent * event) { } void FBallWidget::enterEvent(QEvent *event) { int screenWidth = QApplication::desktop()->screenGeometry().width(); if(this->geometry().x() + this->width() > screenWidth) { QRect rect = this->geometry(); rect.setX(screenWidth - this->width()); QPropertyAnimation *pAnimation = new QPropertyAnimation(this, "geometry"); pAnimation->setStartValue(this->geometry()); pAnimation->setEndValue(rect); pAnimation->setEasingCurve(QEasingCurve::Linear); pAnimation->start(QAbstractAnimation::DeleteWhenStopped); } isHide = true; m_over = true; update(); } void FBallWidget::leaveEvent(QEvent *event) { // int screenWidth = QApplication::desktop()->screenGeometry().width(); // if(this->geometry().x() + this->width() > screenWidth - 2) // { // QRect rect = this->geometry(); // rect.setX(screenWidth - 42); // QPropertyAnimation *pAnimation = new QPropertyAnimation(this, "geometry"); // pAnimation->setStartValue(this->geometry()); // pAnimation->setEndValue(rect); // pAnimation->setEasingCurve(QEasingCurve::Linear); // pAnimation->start(QAbstractAnimation::DeleteWhenStopped); // isHide = false; // } // m_over = false; // update(); m_timer->start(1000); } void FBallWidget::contextMenuEvent(QContextMenuEvent * e) { QMenu menu; menu.addAction(QStringLiteral("exit")); QAction *act = menu.exec(QCursor::pos()); //QAction *act = menu.exec(event->screenPos()); if(!act) { qDebug() << "if(!act)"; return; } qDebug() << "notifyExitSoftSig"; emit notifyExitSoftSig(); } void FBallWidget::OnCloseSlot() { qDebug() << "OnCloseSlot"; // close(); qApp->exit(); } void FBallWidget::OnCountSlot() { m_nMemOcc += 2; if(m_nMemOcc >= 120) { m_nMemOcc = 10; } update(); qDebug() << "m_nMemOcc:" << m_nMemOcc; } void FBallWidget::OnBallHideSlot() { QPoint cursorPoint = cursor().pos(); // qDebug() << "cursorPoint: " << cursorPoint; QPoint thisPos = this->pos(); // qDebug() << "this point: " << thisPos << " " << thisPos + QPoint(this->width(),this->height()); QPoint offsetPoint = cursorPoint - thisPos - QPoint(this->width(),this->height()); if(offsetPoint.x() <= -140 || offsetPoint.y() >= 0 || offsetPoint.y() <= -80) { qDebug() << "offsetPoint:" << offsetPoint; } else { return; } m_timer->stop(); int screenWidth = QApplication::desktop()->screenGeometry().width(); if(this->geometry().x() + this->width() > screenWidth - 2) { QRect rect = this->geometry(); rect.setX(screenWidth - 42); QPropertyAnimation *pAnimation = new QPropertyAnimation(this, "geometry"); pAnimation->setStartValue(this->geometry()); pAnimation->setEndValue(rect); pAnimation->setEasingCurve(QEasingCurve::Linear); pAnimation->start(QAbstractAnimation::DeleteWhenStopped); isHide = false; } m_over = false; update(); } void FBallWidget::paintEvent(QPaintEvent *e) { // QPainterPath pathFill; // pathFill.setFillRule(Qt::WindingFill); int startX = 22; int startY = 1; // pathFill.addEllipse(startX ,startY,50,50); // pathFill.addRect(25 + startX, 8 + startY, 86, 37); // QPainterPath pathFill1; // pathFill1.addEllipse(92 + startX, 7 + startY, 34, 38); // QPainter painter(this); // painter.setPen(QPen(QColor(178, 178, 178))); // QPainterPath pathLine; // pathLine.addEllipse(92 + startX, 7 + startY, 34, 38); // painter.drawRect(25 + startX, 6 + startY, 86, 39); // //绘制渐变的底色 // QLinearGradient linearGradient(0,startY,0,startY + 50); // linearGradient.setColorAt(0.0,QColor(252,252,252)); // linearGradient.setColorAt(1.0,QColor(200,200,200)); // painter.fillPath(pathFill1, QBrush(linearGradient)); // painter.setRenderHint(QPainter::Antialiasing, true); // //右边的半圆 线 // painter.drawPath(pathLine); // painter.setRenderHint(QPainter::Antialiasing, false); // painter.fillPath(pathFill, QBrush(linearGradient)); // painter.setPen(QPen(Qt::white)); // painter.drawLine(30 + startX, 7 + startY, 108 + startX, 7 + startY); // QLinearGradient linearGradient1(109 + startX,0,113 + startX,0); // linearGradient1.setColorAt(0.0,QColor(251,251,251)); // linearGradient1.setColorAt(1.0,QColor(182,182,182)); // painter.setPen(QPen(QBrush(linearGradient1),1)); // painter.drawLine(109 + startX, 7 + startY, 113 + startX, 7 + startY); // QLinearGradient linearGradient2(109 + startX,0,112 + startX,0); // linearGradient2.setColorAt(0.0,QColor(182,182,182)); // linearGradient2.setColorAt(1.0,QColor(185,185,185,64)); // painter.setPen(QPen(QBrush(linearGradient2),1)); // painter.drawLine(109 + startX, 6 + startY, 112 + startX, 6 + startY); // painter.drawLine(109 + startX, 45 + startY, 112 + startX, 45 + startY); // painter.setPen(QPen(QColor(178, 178, 178))); // painter.setRenderHint(QPainter::Antialiasing, true); // painter.drawEllipse(startX ,startY,50,50);//外圈 painter.drawPixmap(3 + startX , 3 + startY, m_bg);//底色 // QRectF rectangle1(3 + startX , 3 + startY, 44, 44); // int m_nMemOcc = 30; // int nMemDrawV = 360/100*m_nMemOcc; // int startAngle = (0 - (90 + nMemDrawV/2)) * 16; // int spanAngle = nMemDrawV * 16; // //绘制内存使用半圆图形 // painter.setBrush(QColor(74,0,0)); // painter.drawChord(rectangle1, startAngle, spanAngle); //// painter.drawChord(rectangle1, -90*16, -90*16); // painter.setRenderHint(QPainter::Antialiasing, false); // qDebug() << "startAngle:" << startAngle << "spanAngle:" << spanAngle; // painter.setBrush(QBrush(Qt::green)); // painter.setPen(Qt::NoPen); // painter.drawRect(this->width()/2+7,30,4,5); // painter.drawPolygon(QPolygonF() << QPointF(this->width()/2+5,35) << QPointF(this->width()/2+13,35) << QPointF(this->width()/2+9,40)); // painter.setBrush(QBrush(Qt::red)); // painter.drawRect(this->width()/2+7,20,4,5); // painter.drawPolygon(QPolygonF() << QPointF(this->width()/2+5,20) << QPointF(this->width()/2+13,20) << QPointF(this->width()/2+9,15)); // QString strNetUpL = "1.1MB"; // QString strNetDownL = "2.2MB"; // QString strMemOcc = "aa"; // QString strCpuOcc = "bb"; // int m_nCpuOcc = 10; // QPen pen(Qt::black); // QFont font; // font.setPointSize(6); // pen.setWidthF(0.5); // painter.setPen(pen); // painter.setFont(font); // painter.drawText(QRectF(this->width()/2+23,15,35,18), strNetUpL); // painter.drawText(QRectF(this->width()/2+23,30,35,18), strNetDownL); // font.setPointSize(10); // pen.setWidthF(6); // pen.setColor(Qt::white); // painter.setPen(pen); // painter.setFont(font); // static bool flag = false; // if(flag) // { // if(10 < m_nMemOcc && m_nMemOcc < 50) // { // pen.setColor(Qt::yellow); // painter.setPen(pen); // } // else if(m_nMemOcc >= 50) // { // pen.setColor(Qt::red); // painter.setPen(pen); // } // painter.drawText(QRectF(33,12,60,40), strMemOcc); // } // else // { // if(10 < m_nCpuOcc && m_nCpuOcc < 50) // { // pen.setColor(Qt::yellow); // painter.setPen(pen); // } // else if(m_nCpuOcc >= 50) // { // pen.setColor(Qt::red); // painter.setPen(pen); // } // painter.drawText(QRectF(35,12,60,40), strCpuOcc); // } // flag = !flag; }