crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QGraphicsView + QGraphicsScene, Непонятное поведение отображения сцены
aspirant
  опции профиля:
сообщение 29.12.2012, 10:50
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 29.12.2012
Пользователь №: 3661

Спасибо сказали: 0 раз(а)




Репутация:   0  


Добрый день!
Необходимо: на сцене создать квадраты, которые располагаются в виде матрицы, затем хочу чтобы при изменение окна автоматически масштабировалась картинка, отображаемая в 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
  опции профиля:
сообщение 29.12.2012, 16:04
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


попробуй - вызови
QWidget::resizeEvent(event);
в начале функции, а не в конце
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 29.12.2012, 17:03
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


aspirant, при создании окна (читай конструктор) его, окна, ещё нет и размеров у него нет.
можно сделать обработчик события:
bool MainWindow::event(QEvent *event)
{
    if( event->type() == QEvent::Show){
        //тут полезный код
    }
    return QWidget::event(event);
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.11.2024, 17:40