Здравствуйте )
Собственно, сабж )
Виджет то сделал, вот только с алгоритмом определения строки и столбца не могу справиться - не правильно определяет 

 Скрин проблемы прилагается )
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();
            }
        }
    }
};