Russian Qt Forum
Июнь 11, 2024, 05:44 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Central Widget и QToolBar  (Прочитано 3032 раз)
mad_celt
Гость
« : Сентябрь 21, 2009, 17:04 »

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

Прошу прощения, если создал не в том разделе...
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Сентябрь 21, 2009, 22:12 »

Я думаю, что лучше чем paintEvent центрального виджета ничего не придумаешь.
Записан

Юра.
mad_celt
Гость
« Ответ #2 : Сентябрь 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() все в порядке...
« Последнее редактирование: Сентябрь 23, 2009, 15:01 от mad_celt » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.143 секунд. Запросов: 19.