Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: QGraphicsView + QGraphicsScene
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Система рисования. Печать
aspirant
Добрый день!
Необходимо: на сцене создать квадраты, которые располагаются в виде матрицы, затем хочу чтобы при изменение окна автоматически масштабировалась картинка, отображаемая в QGraphicsView. Для этого в resizeEvent() вызываю ui->graphView->fitInView(scene->sceneRect(), Qt::KeepAspectRatio). Это все работает.
Проблема: при запуске приложения картинка получается слишком маленькая (мне надо чтобы изображение заполняло graphView по ширине полностью), при первом изменение размера окна приложения, все становится как надо.

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setCentralWidget( ui->graphView);

    scene = new QGraphicsScene();
    ui->graphView->setScene( scene );
    ui->graphView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    ui->graphView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

    drawSys();
    ui->graphView->update();

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::drawSys()
{
    QSize size;
    size.setWidth(10);
    size.setHeight(10);

    for (int y = 0; y < 5; y++)
    {
        for (int x = 0; x < 100; x++)
        {
            scene->addRect(x * (size.height()+3), y * (size.height()+3), size.width(), size.height());
        }
    }

    scale();
}

void MainWindow::scale()
{
    qreal sx = ui->graphView->width()/scene->sceneRect().width();
    qreal sy = ui->graphView->height()/scene->sceneRect().height();
    qDebug() << "sx = " << sx << " sy = " << sy;

//    ui->graphView->scale(sx, 1.0);
}

void MainWindow::resizeEvent(QResizeEvent *event)
{
    qDebug() << "Scene rect: " << scene->sceneRect();
    qDebug() << "View rect: " << ui->graphView->size();

    ui->graphView->fitInView(scene->sceneRect(), Qt::KeepAspectRatio);
    QWidget::resizeEvent(event);
}

Алексей1153
попробуй - вызови
QWidget::resizeEvent(event);
в начале функции, а не в конце
Litkevich Yuriy
aspirant, при создании окна (читай конструктор) его, окна, ещё нет и размеров у него нет.
можно сделать обработчик события:
bool MainWindow::event(QEvent *event)
{
    if( event->type() == QEvent::Show){
        //тут полезный код
    }
    return QWidget::event(event);
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.