crossplatform.ru

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

vizir1989
  опции профиля:
сообщение 17.3.2014, 14:04
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 12
Регистрация: 14.5.2012
Пользователь №: 3377

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




Репутация:   0  


у меня есть некая процедура, которая в цикле добавляет данные в таблицу. Для того, чтобы во время добавления данных интерфейс не тормозил, в цикл добавлена следующая строчка:
qApp->processEvents();

Так же на форме есть кнопка (QPushButton), у которого есть меню.

Если во время добавления данных в таблицу нажать на кнопку, то появляется меню кнопки, при этом процесс добавления данных в таблицу прекращается.
Пока меню отображается данные не добавляются, как только меню убирается, данные продолжают добавляться.

Вопрос, как сделать так, чтобы при появление меню добавление данных не прекращалось?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов (1 - 4)
Trisch
  опции профиля:
сообщение 17.3.2014, 15:40
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 379
Регистрация: 30.1.2012
Из: Запорожье
Пользователь №: 3169

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




Репутация:   0  


Функция qApp->processEvents() используется во время "простоя", то есть, если программа, к примеру, занимается копированием файлов, вы можете вызвать с помощью этой функции функцию, которая будет показывать что программа занята (к примеру, вращающиеся песочные часы). При выходе программы из "простоя" вышеуказанная функция завершается.

Для добавления данных в таблицу используйте отдельный поток. За это отвечает класс QThread.

Сообщение отредактировал Trisch - 17.3.2014, 15:41
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 17.3.2014, 17:23
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Цитата(Trisch @ 17.3.2014, 17:40) *
Функция qApp->processEvents() используется во время "простоя", то есть, если программа, к примеру, занимается копированием файлов, вы можете вызвать с помощью этой функции функцию, которая будет показывать что программа занята (к примеру, вращающиеся песочные часы)
Неверно. Эта функция предназначена для обработки событий, когда программа занята. Т.е. автор темы пользуется ею правильно.


Цитата(Trisch @ 17.3.2014, 17:40) *
Для добавления данных в таблицу используйте отдельный поток.
Это правильная мысль.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
vizir1989
  опции профиля:
сообщение 18.3.2014, 8:09
Сообщение #4


Студент
*

Группа: Новичок
Сообщений: 12
Регистрация: 14.5.2012
Пользователь №: 3377

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




Репутация:   0  


Цитата(Litkevich Yuriy @ 17.3.2014, 18:23) *
Цитата(Trisch @ 17.3.2014, 17:40) *
Функция qApp->processEvents() используется во время "простоя", то есть, если программа, к примеру, занимается копированием файлов, вы можете вызвать с помощью этой функции функцию, которая будет показывать что программа занята (к примеру, вращающиеся песочные часы)
Неверно. Эта функция предназначена для обработки событий, когда программа занята. Т.е. автор темы пользуется ею правильно.


Цитата(Trisch @ 17.3.2014, 17:40) *
Для добавления данных в таблицу используйте отдельный поток.
Это правильная мысль.


Дело в том, что я добавляю в таблицу QTableWidget\QTableView, а Qt не рекомендует работать с этими объектами в отдельном потоке. Я использовал QtConcurrent::run, на что получал кучу предупреждений во время выполнения программы:
QPixmap: it is not safe to use pixmap outside the GUI thread
QPainter::begin: Paint device returned == 0, type: 2
QPainter::setRenderHint: Painter must be active to set rendering hints
QPainter::end: Painter not active, aborted.

И мне это не очень нравится.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 20.3.2014, 8:32
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Цитата(vizir1989 @ 18.3.2014, 10:09) *
а Qt не рекомендует работать с этими объектами в отдельном потоке.
с классами GUI нужно работать в главном потоке. А вот данные для них можно готовить в отдельном потоке, передавая в основной.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


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