PDA

View Full Version : Problems with QGraphicsView resizing.



aarelovich
24th July 2009, 01:05
I need to write a QDialog that shows some QGraphicsItems so I thought I'd just add a QGraphicsView widget to the dialog box;

here is the code:



#include "answerdialog.h"
#include "ui_answerdialog.h"

AnswerDialog::AnswerDialog(QWidget *parent) :
QDialog(parent),
m_ui(new Ui::AnswerDialog)
{
m_ui->setupUi(this);
scene = new QGraphicsScene(0,0,this->width(),this->height());
scene->setBackgroundBrush(QBrush(QColor(23,23,23)));
m_ui->gvDraw->setScene(scene);
m_ui->gvDraw->setFixedSize(450,220);
}

void AnswerDialog::Render(){
QFont font("DejaVu Sans",18,QFont::Normal,false);
scene->addText(Message,font);
}

void AnswerDialog::resizeEvent(QResizeEvent *event){
m_ui->gvDraw->fitInView(scene->sceneRect(),Qt::KeepAspectRatioByExpanding);
}

AnswerDialog::~AnswerDialog()
{
delete m_ui;
}

void AnswerDialog::changeEvent(QEvent *e)
{
QDialog::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
m_ui->retranslateUi(this);
break;
default:
break;
}



This is the code that I use to code this class:


AnswerDialog ans;
ans.setMessage("Hello World");
ans.Render();
ans.exec();


The problem that I have is that when the dialog first appears the text look really really small then as soon as I resize the window, it's then that words take their real size. The size remains the same after that. I've tried using this line:
m_ui->gvDraw->fitInView(scene->sceneRect(),Qt::KeepAspectRatioByExpanding);
in the render function as well but the result is the same.

It seems like unless the command is called with dialog allready shown (and by shown I mean visible on the screen) then the command is inefective.

All I want is to show a message and a couple of QGraphicsItems. Is there anyways for the items to be shown in regular size just as soon as the dialog pops up?

Thanks for any help.

wysota
24th July 2009, 10:57
In their constructor widgets don't have the size determined yet. You are setting the scene size to the size of the widget, which is completely bogus. You should do that in showEvent() instead.

aarelovich
24th July 2009, 12:35
Thank you very much.

That worked perfecty.