crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> QT widget OpenGL (openscenegraph)
Adun177
  опции профиля:
сообщение 17.3.2009, 11:53
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 19
Регистрация: 25.2.2009
Пользователь №: 575

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




Репутация:   0  


Добрый день!
Возник такой вопрос
Я делаю приложение на OpenGL - openscenegraph и QT
на QT сделал диалоги(наследники QWidget) сделал также наследника от QWidget для OpenGL (окно опенжл у меня без рамки если что)
В начале я делаю инициализацию окна GL далее вывожу дилог выбора упражнения dialog->show() выбираю 3D объекты которые надо загрузить и далее убираю этот диалог с экрана dialog->close();
все нормально работает все крутится. Далее я нажимаю на кнопку выбора упражнения все в моем окне замирает опять использую dialog->show() но во второй раз в окне ничего не рисуется хотя paintevent отрабатывает. Мне кажется что во второй раз не происходит передача управления в опенжл окно.
Сорри за нубство но может быть кто-нибудь знает как сделать так чтобы передавалась передача управляющему окну. Удалять и заново создавать окно не вариант так как загружаются очень большие 3D данные.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Adun177
  опции профиля:
сообщение 17.3.2009, 17:34
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 19
Регистрация: 25.2.2009
Пользователь №: 575

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




Репутация:   0  


Да наверное я трудный вопрос задал
постараюсь по другому
у меня не передается назад управление в мой виджет даже если я вызываю
QMessageBox::critical(0,message[151],message[7],QMessageBox::Cancel);
после нажатия на кнопку у меня зависон в главном виджете
наверное простая ошибка однако я незнаю как отловить ее
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 17.3.2009, 17:37
Сообщение #3


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

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




Репутация:   40  


Скорей не понятно, что, когда и откуда вызывается и как это делается! :)

Основной кусок кода, если можно, лучше покажи. Если код большой, то обрами его в тэг [expand][/expand]
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Adun177
  опции профиля:
сообщение 17.3.2009, 22:46
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 19
Регистрация: 25.2.2009
Пользователь №: 575

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




Репутация:   0  


код очень большой если потребуется почищу его
пока заметил такую вещь мой виджет наследник QWidget и рисует графику через paintevent
но если я вызываю диалог через paintevent то замораживается основной виджет
void paintEvent( QPaintEvent * event ) 
{
                  
                  if (flag_start)
                  {
                        main->show();
                        Flag_start=false;
                  }
                  frame();
}

однако если я вызываю через keypressevent то все работает как надо и передается управление в основной виджет
 void keyPressEvent( QKeyEvent* event )
{
                  if(event->key()==Qt::Key_F11 )
                        main_dialog->show();
}

теперь остается решить задачу как вызывать диалог не через paintevent
если непонятно то завтра на работе вычищу код и выложу но может быть для знающих людей уже решение на поверхности.
Причина редактирования: используй тег code
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
molchanoviv
  опции профиля:
сообщение 17.3.2009, 22:51
Сообщение #5


Старейший участник
****

Группа: Сомодератор
Сообщений: 597
Регистрация: 18.7.2008
Из: Саратов
Пользователь №: 238

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




Репутация:   5  


У меня была наподобие проблема. Решил тогда написанием функиции на GL где в качестве аргументов передавал в нее настройки. Реализацию к сожалению не помню.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 17.3.2009, 22:59
Сообщение #6


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

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

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




Репутация:   44  


Цитата(Adun177 @ 17.3.2009, 22:46) *
но если я вызываю диалог через paintevent то замораживается основной виджет

Так а зачем ты пытаешся в обработчике события перерисовки показывать диалог?
Как-то я смысла в этом не вижу совсем?

Цитата
Далее я нажимаю на кнопку выбора упражнения....

Вот в обработчике сигнала нажатия на эту кнопку и открывай диалог.

Сообщение отредактировал BRE - 17.3.2009, 23:01
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Adun177
  опции профиля:
сообщение 17.3.2009, 23:32
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 19
Регистрация: 25.2.2009
Пользователь №: 575

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




Репутация:   0  


BRE, а как именно связать сигналом для моего случая?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 17.3.2009, 23:37
Сообщение #8


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

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

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




Репутация:   44  


Цитата(Adun177 @ 17.3.2009, 23:32) *
BRE, а как именно связать сигналом для моего случая?

connect( buttonSelectSample, SIGNAL( clicked() ), main_dialog, SLOT( show() ) );
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Adun177
  опции профиля:
сообщение 19.3.2009, 10:39
Сообщение #9


Студент
*

Группа: Участник
Сообщений: 19
Регистрация: 25.2.2009
Пользователь №: 575

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




Репутация:   0  


Спасибо за обсуждение
Все оказалось просто - так как я пользуюсь OpenSceneGraph - там зашито что при стандартном создании контектста ОпенЖЛ на клавишу Escape вешается закрытие контеста и закрытие окна а так как получается что рендерится в QT то контекст закрывается а окно нет.
Запретив это у меня все хорошо работает.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 22.12.2024, 9:19