Здравствуйте )
Собственно, сабж )
Виджет то сделал, вот только с алгоритмом определения строки и столбца не могу справиться - не правильно определяет
Скрин проблемы прилагается )
class foo: public QWidget
{
Q_OBJECT
public:
foo(QWidget *parent = 0)
: QWidget(parent)
{
size = 20;
indent = 5;
rowCount = 8;
columnCount = 7;
int width = (indent + size) * columnCount + indent;
int height = (indent + size) * rowCount + indent;
setFixedSize(width, height);
setMouseTracking(true);
selectedRow = -1;
selectedColumn = -1;
}
private:
int rowCount;
int columnCount;
float indent;
float size;
int selectedRow;
int selectedColumn;
protected:
void mouseMoveEvent(QMouseEvent *event)
{
int x = event->pos().x();
int y = event->pos().y();
selectedColumn = x / size;
selectedRow = y / size;
if(selectedColumn <= 0)
selectedColumn = 1;
if(selectedRow <= 0)
selectedRow = 1;
if(selectedColumn > columnCount)
selectedColumn = columnCount;
if(selectedRow > rowCount)
selectedRow = rowCount;
setWindowTitle(QString("%1x%2")
.arg(selectedColumn)
.arg(selectedRow));
update();
}
void paintEvent(QPaintEvent *)
{
QPainter painter(this);
QPen pen;
// Отрисуем основную таблицу
pen.setColor(Qt::darkGray);
painter.setPen(pen);
for(int column = 0; column < columnCount; column++)
{
int x = (indent + size) * column + indent;
for(int row = 0; row < rowCount; row++)
{
int y = (indent + size) * row + indent;
painter.drawRect(x, y, size, size);
}
}
// Отрисуем поверх основной таблицы, таблицу выделенную мышкой
pen.setColor(QColor("#7CFC00"));
pen.setJoinStyle(Qt::RoundJoin);
pen.setWidthF(2.0);
painter.setPen(pen);
for(int column = 0; column < selectedColumn; column++)
{
int x = (indent + size) * column + indent;
for(int row = 0; row < selectedRow; row++)
{
int y = (indent + size) * row + indent;
painter.save();
painter.setBrush(Qt::white);
float factor = 1.5;
painter.drawRect(x - factor, y - factor,
size + factor, size + factor);
painter.restore();
}
}
}
};