Problem when i scroll to maximum values



  • Hello,
    i have imlemented already this "screenshot1":https://www.dropbox.com/s/vnoyunb3byroztl/screenshot1.png
    I have a problem when i scroll (horizontally or vertically) to maximum values, this is how it looks
    "sceenshot2":https://www.dropbox.com/s/bxccieps66a15mm/prtscreen1.png
    As you see the last row is not totally aligned.

    Some snippset of code:
    the initialization of the scrollbars
    @void VDatagridView::scrollBarInit()
    {
    int visibleRows = calcVerticalGeometry();
    int verticalPageStep = visibleRows;
    int verticalMax = ui->verticalTableView->verticalScrollBar()->maximum();
    ui->verticalScrollBar->setMinimum(0);
    ui->verticalScrollBar->setSingleStep(1);
    ui->verticalScrollBar->setPageStep(verticalPageStep);
    ui->verticalScrollBar->setMaximum(verticalMax);

    int visibleColumns = calcHorizontalGeometry();
    int horizontalPagestep = visibleColumns;
    int horizontalMax = ui->horizontalTableView->horizontalScrollBar()->maximum();
    ui->horizontalScrollBar->setMaximum(0);
    ui->horizontalScrollBar->setSingleStep(1);
    ui->horizontalScrollBar->setPageStep(horizontalPagestep);
    ui->horizontalScrollBar->setMaximum(horizontalMax+1);
    }@
    This function called when i start the programm and when the window is resized

    The function that draws the grid in the viewport
    @void VDatagridView::drawGrid()
    {
    int verticalSValue = min(ui->verticalScrollBar->value(), getMaxSVerValue());
    int columns = calcHorizontalGeometry();
    int rows = calcVerticalGeometry();
    _dataModel = new QStandardItemModel(rows, columns, this);

    ui->tableView->verticalHeader()->hide();
    ui->tableView->horizontalHeader()->hide();
    ui->tableView->setModel(_dataModel);
    if (verticalSValue < getMaxSVerValue())
    {
    for ( int i = 0; i < rows; i++)
    {
    ui->tableView->setRowHeight(i, (ui->verticalTableView->rowHeight(verticalSValue+i)));
    }

    }
    else
    {
    for ( int i = 0; i < rows; i++)
    {
    ui->tableView->setRowHeight(i, (ui->verticalTableView->rowHeight(verticalSValue+i)));
    }

    }

    int horizontalSValue = min(ui->horizontalScrollBar->value(), getMaxSHorValue());

    if (horizontalSValue < getMaxSHorValue())
    {
    for ( int i = 0; i < columns; i++)
    {
    ui->tableView->setColumnWidth(i, (ui->horizontalTableView->columnWidth(horizontalSValue+i)));
    }

    }
    else
    {
    for ( int i = 0; i < columns; i++)
    {
    ui->tableView->setColumnWidth(i, (ui->horizontalTableView->columnWidth(horizontalSValue+i)));
    }

    }
    }@
    The else case is when the scrollbar has the maximum vlaue. I haven't write something different right now because i don't know if this is the problem and also i don't know what should i change.

    Also the function tha drawGrid() uses
    @int VDatagridView::calcVerticalGeometry()
    {
    int count=0, freeSpace;
    freeSpace = ui->verticalTableView->geometry().height();

    for(;;)
    {
    freeSpace -= ui->verticalTableView->rowHeight( count++ + min( ui->verticalScrollBar->value() ,getMaxSVerValue() ));

    if ( freeSpace <=0 || count>100 )
    {
    
      return count;
    }
    

    }
    }@

    @int VDatagridView::calcHorizontalGeometry()
    {
    int count = 0;
    int freeSpace = ui->horizontalTableView->geometry().width();

    int scrollBarIndex = ui->horizontalTableView->horizontalScrollBar()->value();

    for(;;)
    {
    freeSpace -= ui->horizontalTableView->columnWidth( count + scrollBarIndex );
    count++;

    if ( freeSpace <= 0 || count > 100 )
    {
      return count;
    }
    

    }

    }@

    horizontalTableView is the table with the dates, verticalTableView is the one on the left and tableView is the grid.

    Any ideas?
    Thanks in advance!


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.