#ifndef CATALOG_H
#define CATALOG_H
#include <QWidget>
class Catalog : public QWidget
{
Q_OBJECT
public:
explicit Catalog(QWidget *parent = 0);
void initCatalog(int Width, int Height, int HInterval, int VInterval);
void setAlignment(Qt::AlignmentFlag alignment=Qt::AlignCenter);
int maxPixmapNumber();
void addPixmap(const QPixmap & pixmap);
signals:
void clicked(int index);
public slots:
void DetObject();
protected:
void paintEvent(QPaintEvent *event);
void mousePressEvent(QMouseEvent *event);
private:
int m_HorizontalInterval;
int m_VerticalInterval;
int m_PixmapWidth;
int m_PixmapHeight;
int m_HWidth;
int m_VHeight;
int m_HCount;
int m_VCount;
int m_HAlignment;
int m_VAlignment;
QList<QPixmap> m_Pixmaps;
};
#endif // CATALOG_H
#include "catalog.h"
#include <QPainter>
#include <QMouseEvent>
Catalog::Catalog(QWidget *parent) : QWidget(parent)
{
m_HorizontalInterval = 0;
m_VerticalInterval = 0;
m_PixmapWidth = 0;
m_PixmapHeight = 0;
m_HWidth = 0;
m_VHeight = 0;
m_HCount = 0;
m_VCount = 0;
}
void Catalog::initCatalog(int Width, int Height, int HInterval, int VInterval)
{
m_PixmapWidth = Width;
m_PixmapHeight = Height;
m_HorizontalInterval = HInterval;
m_VerticalInterval = VInterval;
m_HWidth = m_PixmapWidth + m_HorizontalInterval;
m_VHeight = m_PixmapHeight + m_VerticalInterval;
m_HCount = width() / m_HWidth;
m_VCount = height() / m_VHeight;
if(!m_HAlignment && !m_VAlignment)
setAlignment();
}
void Catalog::setAlignment(Qt::AlignmentFlag alignment)
{
switch(alignment){
case Qt::AlignLeft:
m_HAlignment = 0;
m_VAlignment = m_VerticalInterval / 2;
break;
case Qt::AlignRight:
m_HAlignment = m_HorizontalInterval;
m_VAlignment = m_VerticalInterval / 2;
break;
case Qt::AlignTop:
m_HAlignment = m_HorizontalInterval / 2;
m_VAlignment = 0;
break;
case Qt::AlignBottom:
m_HAlignment = m_HorizontalInterval / 2;
m_VAlignment = m_VerticalInterval;
break;
case Qt::AlignCenter:
m_HAlignment = m_HorizontalInterval / 2;
m_VAlignment = m_VerticalInterval / 2;
}
}
int Catalog::maxPixmapNumber()
{
return m_VCount * m_HCount;
}
void Catalog::addPixmap(const QPixmap &pixmap)
{
m_Pixmaps << pixmap;
}
void Catalog::DetObject()
{
m_Pixmaps.clear();
}
void Catalog::paintEvent(QPaintEvent *)
{
if(!m_HCount)
return;
QPainter *p = new QPainter(this);
int x,y,index=0;
int length = m_Pixmaps.length();
while(index<length){
x = index % m_HCount;
y = index / m_HCount;
p->drawPixmap(m_HWidth * x + m_HAlignment,
m_VHeight * y + m_VAlignment,
m_PixmapWidth,
m_PixmapHeight,
m_Pixmaps[index++]);
}
p->end();
}
void Catalog::mousePressEvent(QMouseEvent *event)
{
if(!m_HCount)
return;
QPoint pos = event->pos();
int x = pos.x() / m_HWidth;
int y = pos.y() / m_VHeight;
emit clicked(x + y * m_HCount);
}