Название: [РЕШЕНО] Виджет выбора количества строк и столбцов в таблице
Отправлено: gil9red от Июнь 27, 2013, 16:41
Здравствуйте ) Собственно, сабж ) Виджет то сделал, вот только с алгоритмом определения строки и столбца не могу справиться - не правильно определяет :( Скрин проблемы прилагается ) 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(); } } } };
Название: Re: Виджет выбора количества строк и столбцов в таблице
Отправлено: Old от Июнь 27, 2013, 16:58
При расчете выбранных ячеек не учитывается ident.
Название: Re: Виджет выбора количества строк и столбцов в таблице
Отправлено: gil9red от Июнь 27, 2013, 17:10
Да, знаю - забыл написать ::) а как изменить алгоритм, чтобы был учет отступа (indent) ???
Название: Re: Виджет выбора количества строк и столбцов в таблице
Отправлено: Old от Июнь 27, 2013, 17:15
Да, знаю - забыл написать ::) а как изменить алгоритм, чтобы был учет отступа (indent) ???
Вы делите координату на size, а нужно на size+indent.
Название: Re: Виджет выбора количества строк и столбцов в таблице
Отправлено: gil9red от Июнь 27, 2013, 17:19
Точно! :D
Название: Re: Виджет выбора количества строк и столбцов в таблице
Отправлено: Old от Июнь 27, 2013, 17:31
Точно! :D
Можно легко все рисовать не в два прохода, а в один.
|