Qt World Summit: Register Today!

Size QGraphicsView automatically

  • Hi users!!
    First of all thanks for helping me.

    I have a Scene in a GraphicView. In this Scene I depict lines which show a map.
    The problem is that the lines has not always the same size so I depict the lines sometimes small, sometimes big...
    I need to fit the map to the QGraphicsView window.

    Here my code is:

    QGraphicsScene *scene;
    QGraphicsLineItem *line;
    MainWindow::MainWindow(QWidget *parent) :
        ui(new Ui::MainWindow)
       scene = new QGraphicsScene(this);
        ui->graphicsView->setScene(scene); //We associate the ui GraphicsView to Scene that we have created before.
        //connect(this,SIGNAL(print_lines_signal(QFile *)),this,SLOT(print_lines_slot(QFile *)));
                 pinta las líneas
                    QString text = file.readAll(); //Conversion from QFile to QString to be able to split the whole text in lines and words.
                    QStringList lines = text.split("\n", QString::SkipEmptyParts); //Split the whole text in lines and save them in an List called "lines"
                    QStringList words; //Words will save all the words in each lines. We will always have   words (x_start, y_start, x_end, y_end, psi, r)
                    int num_lines = lines.size(); //We obtein the number of lines that text has.
                    struct struc_lines lines_struct[num_lines]; //We create the line structury which will be an array structure with num_lines elements.
                    for (int i=0;i<num_lines;i++)
                        words = lines.at(i).split(" ", QString::SkipEmptyParts); // Split each line in words
                        lines_struct[i].x_start= words.at(0).toDouble(); //We take the first word and convert it to Double because it was QString type before
                        lines_struct[i].y_start= words.at(1).toDouble(); //Second word
                        lines_struct[i].x_end= words.at(2).toDouble(); //Third word
                        lines_struct[i].y_end= words.at(3).toDouble(); //Fourth word
                        QPen blue(Qt::blue);
                        line = scene->addLine(lines_struct[i].x_start,lines_struct[i].y_start,lines_struct[i].x_end,lines_struct[i].y_end, blue); //Esta multiplicado por diez para que se vea mejor
                        std::cout<<i << " " << lines_struct[i].x_start<< std::endl;
    Can anybody help me'

  • @AlvaroS I have done this:


    the problem is that the scene fits well but not at all. My graphivsView always show a little scrollbars to see the part of the scene that is not showed in the graphicsview...

    How can I fix that¿


  • You might want to have a look at QGraphicsView::setFixedSize(). Also, it's possible to disable the scroll bars using QGraphicsView::setXxxScrollBarPolicy()

    view->setFixedSize(view->scene()->width(), view->scene()->height());

    Depending on your needs, you might want to combine that together with QGraphicsView::setFixedSize().
    Other functions that might help to archive what you want include QGraphicsView::ensureVisible() and QGraphicsView::fitInView().

    I hope that helps

  • @Joel-Bodenmann Thanks a lot. You helped me!!!

Log in to reply