Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: mad_celt от Сентябрь 21, 2009, 17:04



Название: Central Widget и QToolBar
Отправлено: mad_celt от Сентябрь 21, 2009, 17:04
Привет! Наметилась следующая проблемка... У меня в СДИ приложении роль центрального виджета играет виджет, на котором я рисую некоторую картинку, которую предварительно генерю. Вся ерунда заключается в том, что картинка должна иметь размеры, точь в точь совпадающие с размерами самого виджета. Все было просто прекрасно, пока я не добавил тул бар. Я никак не пойму, в какой момент времени отрисовывается тул бар, но он отрисовывается явно после генерации моей картинки. Из-за этого часть картинки съезжает вниз и центр картинки не совпадает с центром виджета... Подскажите, пожалуйста, как можно отловить время, когда рисуется тул бар?

Прошу прощения, если создал не в том разделе...


Название: Re: Central Widget и QToolBar
Отправлено: lit-uriy от Сентябрь 21, 2009, 22:12
Я думаю, что лучше чем paintEvent центрального виджета ничего не придумаешь.


Название: Re: Central Widget и QToolBar
Отправлено: mad_celt от Сентябрь 22, 2009, 08:24
Да вот в том-то и дело, что... Через пэинт-евент и работаю :)

GalaxyWidget - как раз центральный. galaxyImage генерится еще в конструкторе класса GalaxyWidget.

Код
C++ (Qt)
void GalaxyWidget::paintEvent(QPaintEvent *event)
{
   QPainter painter(this);
 
   QBrush brush;
   brush.setColor(Qt::black);
   brush.setStyle(Qt::SolidPattern);
 
   painter.fillRect(rect(), brush);
 
   if(autoRefresh){
       if(galaxyType == Elliptic) galaxyImage = drawEllipticGalaxy();
       if(galaxyType == Mindal) galaxyImage = drawMindalGalaxy();
       if(galaxyType == Spiral) galaxyImage = drawSpiralGalaxy();
   }
 
   int x = 0, y = 0;
   if(galaxyImage.width() < width()) x = (width() - galaxyImage.width())/2;
   if(galaxyImage.height() < height()) y = (height() - galaxyImage.height())/2;
 
   painter.drawImage(x, y, galaxyImage);
}
 

Вот конструктор класса MainWidget:

Код
C++ (Qt)
MainWindow::MainWindow()
{
   galaxy = new GalaxyWidget();
 
   createFileMenu();
   createEditMenu();
   createGalaxiesMenu();
 
   createStatusBar();
   createToolBar();
 
   setMinimumSize(300, 200);
   resize(640, 480);
 
   setCentralWidget(galaxy);
 
   setWindowTitle(tr("Galaxy model"));
   setAttribute(Qt::WA_DeleteOnClose);
}
 

И все равно картинка galaxyImage при первом пэйнт-евенте (во время рисования окна, насколько я понимаю) считает, что ее размер == размер центрального виджета GalaxyWidget без тулбара... При последующих вызовах update() все в порядке...