1 #include "boxwidget.h"
2 #include <QGridLayout>
3 #include "plughandler.h"
4 #include <QPainter>
5 #include <QRect>
6 #include <QMouseEvent>
7 #include <QResizeEvent>
8 #include <qmath.h>
9 #include <QDebug>
10 #include <QCoreApplication>
BoxWidget(QWidget * parent)11 BoxWidget::BoxWidget(QWidget *parent) : QWidget(parent),
12 m_index(0)
13 {
14 setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
15 m_ids = PlugHandler::instance()->getShowPlugins();
16 this->setMouseTracking(true);
17
18 QFont f= this->font();
19 f.setPixelSize(18);
20 this->setFont(f);
21 }
22
mousePressEvent(QMouseEvent * e)23 void BoxWidget::mousePressEvent(QMouseEvent *e)
24 {
25 QWidget::mousePressEvent(e);
26 qDebug()<<"release:"<< e->pos();
27 }
28
mouseReleaseEvent(QMouseEvent * e)29 void BoxWidget::mouseReleaseEvent(QMouseEvent *e)
30 {
31 QWidget::mouseReleaseEvent(e);
32 //判断翻页被点击.
33 if(m_rightRect.contains(e->pos()))
34 {
35 qDebug()<<"right";
36 m_index++;
37 if(m_index >= qCeil(m_ids.size()/12.0)){
38 m_index =0;
39 }
40 update();
41 return;
42 }else if(m_leftRect.contains(e->pos()))
43 {
44 qDebug()<<"left";
45 m_index--;
46 if(m_index <0){
47 m_index =qCeil(m_ids.size()/12.0)-1;
48 }
49 update();
50 return;
51 }
52
53 for(int i=0; i<m_rects.size(); i++){
54 QRect rect = m_rects[i];
55 if(rect.contains(e->pos())){
56 qDebug()<< m_ids[i+m_index*12];
57 showPlugins(m_ids[i+m_index*12]);
58 // printf(QString("START_%1_END").arg(m_ids[i+m_index*12]).toLatin1().data() );
59 // fflush(stdout);
60 break;
61 }
62 }
63
64 qDebug()<<"release:"<< e->pos() << m_rightRect;
65 }
66
mouseMoveEvent(QMouseEvent * e)67 void BoxWidget::mouseMoveEvent(QMouseEvent *e)
68 {
69 QWidget::mouseMoveEvent(e);
70 m_pos = e->pos();
71 this->update();
72 }
73
paintEvent(QPaintEvent * e)74 void BoxWidget::paintEvent(QPaintEvent *e)
75 {
76 QPainter painter(this);
77 // painter.fillRect(this->rect(), Qt::black);
78 // painter.setPen(Qt::white);
79 QRect r = rect().adjusted(10, 10, -10, -20);
80 qreal avgeWidth = r.width()/4;
81 qreal avgeHight = r.height()/3;
82 m_rects.clear();
83
84 //获取当前页的数据.
85 QRect mouseEnterRect;
86 QStringList ids;
87 for(int j=m_index*12; j<m_ids.size(); j++){
88 ids << m_ids[j];
89 }
90
91 //绘制窗口网格.
92 for(int i=0; i<ids.size() && i<12 ; i++){
93 int row= qFloor(i/4);
94 int col= i%4;
95
96 QRect rect(r.x()+col*avgeWidth, r.y()+row*avgeHight, avgeWidth, avgeHight);
97
98 QString fileName=qApp->applicationDirPath() +"/forlinx/" +ids[i] +".png";
99 QPixmap p(fileName);
100 QTextOption option=QTextOption(Qt::AlignCenter);
101 if(!p.isNull())
102 {
103 QPoint center(rect.x() + rect.width()/2, rect.y() + rect.height()/2);
104 center.setX(center.x()- p.width()/2);
105 center.setY(center.y() -p.height()/2);
106 painter.drawPixmap(center, p);
107 option = QTextOption(Qt::AlignCenter | Qt::AlignBottom);
108 }
109
110 QRectF textRect =painter.boundingRect(rect, ids[i], option);
111 painter.drawText(textRect, ids[i]);
112 painter.save();
113 painter.setPen(Qt::gray);
114 painter.drawRect(rect);
115 painter.restore();
116 if(rect.contains(m_pos))
117 {
118 mouseEnterRect = rect;
119 }
120 m_rects<< rect;
121
122 }
123
124 //绘制鼠标悬浮区域.
125 if(!mouseEnterRect.isEmpty())
126 {
127 painter.setPen(Qt::blue);
128 painter.drawRect(mouseEnterRect);
129 }
130
131 if(!m_leftRect.isNull())
132 {
133 //绘制翻页区域.
134 painter.setBrush(Qt::black);
135 painter.setPen(Qt::white);
136 painter.drawRect(m_leftRect);
137 painter.drawText(painter.boundingRect(m_leftRect, "<",QTextOption(Qt::AlignCenter)), "<");
138 painter.drawRect(m_rightRect);
139 painter.drawText(painter.boundingRect(m_rightRect, ">", QTextOption(Qt::AlignCenter)), ">");
140 }
141 }
142
resizeEvent(QResizeEvent * e)143 void BoxWidget::resizeEvent(QResizeEvent *e)
144 {
145 QWidget::resizeEvent(e);
146 if(m_ids.size() >12){
147 int w=e->size().width();
148 int h =e->size().height();
149 m_leftRect = QRect (0, h-20, 30, 20);
150 m_rightRect =QRect (w-30, h-20, 30, 20);
151 qDebug()<< m_rightRect;
152 }
153 }
154