| 
 Название: [РЕШЕНО] Виджет выбора количества строк и столбцов в таблице
 Отправлено: 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
 Можно легко все рисовать не в два прохода, а в один.
 
 |