crossplatform.ru

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

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
gvenihvivar
  опции профиля:
сообщение 26.8.2014, 10:36
Сообщение #11


Студент
*

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

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




Репутация:   0  


Совет с this->layout не помог. Так что выкладываю проект. Один график, который исправно работает, лежит в main. Второй в виде слота slotRealGraph() в mainwindow сразу после описания класса. Чтобы вызвать слот, необходимо нажать кнопку "График", которая находится в левой части экрана под черными прямоугольниками

тут лежит проект
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
gvenihvivar
  опции профиля:
сообщение 5.9.2014, 12:45
Сообщение #12


Студент
*

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

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




Репутация:   0  


Уважаемые специалисты, скажите мне хоть что-нибудь. Это возможно, но тяжело или вообще не возможно заставить работать так как надо? Или хотя бы в какую сторону копать? Я уже перепробовала настройки самого mdi area и subwindow, ничего не помогло.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 6.9.2014, 10:20
Сообщение #13


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

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

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




Репутация:   8  


Т.к. оси рисуются, к Layoutам эта проблема не имеет отношения.

Это возможно, просто вы не правильно используете QThread.
Когда переопределяете метод run, помните что как только вы выходите из этого метода QThread заканчивается.
Для того чтобы запустить Event Loop в этом потоке(а он нужен для таймеров и сигналов), вызывайте QThread::exec.
А лучше почитайте вот эту статью:
http://mayaposch.wordpress.com/2011/11/01/...ull-explanation

В main работает, потому что там уже есть Event Loop запущенный через a.exec()

В приложении рабочий пример того что вам нужно через QThread::exec.

Сообщение отредактировал lanz - 6.9.2014, 10:31
Прикрепленные файлы
Прикрепленный файл  scratch1.zip ( 2.63 килобайт ) Кол-во скачиваний: 118
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
gvenihvivar
  опции профиля:
сообщение 6.9.2014, 12:00
Сообщение #14


Студент
*

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

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




Репутация:   0  


спасибо за пример, я его обязательно изучу. Но график рисуется в основном потоке (только данные поступают из вспомогательного) и не только в main, а и в mainwindow, но как только я передаю его в mdi area через addsubwindow график перестает работать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 6.9.2014, 12:36
Сообщение #15


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

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

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




Репутация:   8  


Сделайти минимальный проект на котором это проявляется. Ваш проект я не смог запустить у себя.
Попробуйте изменить мой пример так, чтобы он демонстрировал сходное поведение.

Сделайте печаталку в slotPoint чтобы убедится что слот вызывается.

Сообщение отредактировал lanz - 6.9.2014, 12:40
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
gvenihvivar
  опции профиля:
сообщение 8.9.2014, 14:04
Сообщение #16


Студент
*

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

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




Репутация:   0  


 auto sub = new QMdiSubWindow( this->ui->mdiArea );

что означает auto. С ним не хотело работать.

А в целом заработало. Оказывается, проблема была в styleSheet. После создания главного окна в дизайнере, я там прописала его фон. Не знаю тонкостей, но после того, как я вытерла эту настройку, все прекрасно заработало.

Кстати, lanz, ты хорошо разбираешься в потоках?
Я делала перенос потока методом movetothread(). Этот поток начинает работать с открытием приложение, и заканчивает после закрытия. Так вот программа после закрытия утверждает QThread: Destroyed while thread is still running. Хотя я уже сигналы и так, и этак привязывала к закрытие приложение. Можешь что-нибудь подсказать?

Сообщение отредактировал gvenihvivar - 8.9.2014, 14:07
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ahalaj
  опции профиля:
сообщение 8.9.2014, 15:43
Сообщение #17


Студент
*

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

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




Репутация:   1  


Цитата(gvenihvivar @ 8.9.2014, 15:04) *
 auto sub = new QMdiSubWindow( this->ui->mdiArea );

что означает auto. С ним не хотело работать.

Это из C++11, чтобы не приходилось объявлять

QMdiSubWindow* sub = new QMdiSubWindow( this->ui->mdiArea );


компилятор сам присвоит переменной sub тип QMdiSubWindow*. По аналогии с объявлением переменных var в C#.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 8.9.2014, 18:06
Сообщение #18


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

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

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




Репутация:   8  


Цитата(gvenihvivar @ 8.9.2014, 15:04) *
Я делала перенос потока методом movetothread(). Этот поток начинает работать с открытием приложение, и заканчивает после закрытия. Так вот программа после закрытия утверждает QThread: Destroyed while thread is still running. Хотя я уже сигналы и так, и этак привязывала к закрытие приложение. Можешь что-нибудь подсказать?

Обычно в деструкторе основного окна я делаю thread->quit(), которое завершает Event loop, а потот thread->wait(), чтобы поток успел обработать это сообщение, тогда такого не будет.


moveToThread нужно делать не с наследником QThread, почитайте статью Майи, на которую я давал ссылку.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 8.7.2025, 18:59