crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Заполнение большой таблицы, >1000 строк
RazrFalcon
  опции профиля:
сообщение 21.4.2011, 20:10
Сообщение #1


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Пользователь добавляет папку через QFileDialog. Программа загружает данные обо всех файлах.
При этом QFileDialog так и зависает на экране. Исчезает только после завершение добавления файлов.
Как сделать что бы он сразу скрывался?

Я так понимаю что нужно новый поток сделать, в котором будет заполнятся таблица? Оно не будет сбоить из-за этого? Или есть более простые варианты?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 22.4.2011, 5:06
Сообщение #2


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

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

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




Репутация:   6  


Цитата(RazrFalcon @ 21.4.2011, 22:10) *
Пользователь добавляет папку через QFileDialog. Программа загружает данные обо всех файлах.
При этом QFileDialog так и зависает на экране. Исчезает только после завершение добавления файлов.
Как сделать что бы он сразу скрывался?

Я так понимаю что нужно новый поток сделать, в котором будет заполнятся таблица? Оно не будет сбоить из-за этого? Или есть более простые варианты?


Быть может:
QFileDialog::hide();
QFileDialog::repaint();
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 22.4.2011, 11:30
Сообщение #3


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

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

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




Репутация:   12  


Цитата(RazrFalcon @ 21.4.2011, 21:10) *
Я так понимаю что нужно новый поток сделать, в котором будет заполнятся таблица? Оно не будет сбоить из-за этого? Или есть более простые варианты?

Любые продолжительные операции лучше "выносить" из потока gui в отдельный поток, тогда все будет закрываться быстро, остальные варианты (по моему мнению) - костыли...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 22.4.2011, 11:39
Сообщение #4


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

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

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




Репутация:   6  


Цитата(RazrFalcon @ 21.4.2011, 22:10) *
Или есть более простые варианты?

Поэтому и:
Цитата(wiz29 @ 22.4.2011, 13:30) *
остальные варианты (по моему мнению) - костыли...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 22.4.2011, 11:50
Сообщение #5


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

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

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




Репутация:   12  


не привыкай к костылям:) инвалидом станешь :p
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 22.4.2011, 12:05
Сообщение #6


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

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

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




Репутация:   6  



ОФФ:

Я не виноват, спросили как сделать без потоков - подсказал чего знал. Сам грешен. Кусок кода, который читает данные с ком порта не обернул в отдельный поток, но это времянка, пока отлаживаю.


Кстати раз уж разговорились об этом. Есть поток, отдельный от ГУИ, в котором сеть работает (QSSLSocket висит), можно ли на время чтения из ком порта, засунуть это чтение в тот поток или создавать дополнительный, уже третий поток для этого дела?

Сообщение отредактировал silver47 - 22.4.2011, 12:08
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 22.4.2011, 12:38
Сообщение #7


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

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

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




Репутация:   12  


если нужна строго независимая работа данных устройств, то тогда лучше создать объект для работы COM-портом в контексте отдельного потока.

если же это "разовое" чтение из COM-порта, я бы сделал просто функцию чтения используя QtConcurent framework.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 22.4.2011, 12:49
Сообщение #8


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

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

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




Репутация:   6  


Цитата(wiz29 @ 22.4.2011, 14:38) *
если нужна строго независимая работа данных устройств, то тогда лучше создать объект для работы COM-портом в контексте отдельного потока.

если же это "разовое" чтение из COM-порта, я бы сделал просто функцию чтения используя QtConcurent framework.


Это именно разовое чтение. Спасибо, почитаю.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
PAFOS
  опции профиля:
сообщение 22.4.2011, 16:50
Сообщение #9


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

Группа: Участник
Сообщений: 258
Регистрация: 27.12.2010
Из: Дмитров
Пользователь №: 2309

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




Репутация:   8  


Цитата(RazrFalcon @ 21.4.2011, 21:10) *
Пользователь добавляет папку через QFileDialog. Программа загружает данные обо всех файлах.
При этом QFileDialog так и зависает на экране. Исчезает только после завершение добавления файлов.
Как сделать что бы он сразу скрывался?

Я так понимаю что нужно новый поток сделать, в котором будет заполнятся таблица? Оно не будет сбоить из-за этого? Или есть более простые варианты?


Не забываем про стандартную схему обработки длительных операций
// Получение списка файлов
...
// Закрытие диалога
...

for(...)
{
   // Обработка одного файла
  QApplilcation::processEvents()
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 22.4.2011, 17:27
Сообщение #10


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

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

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




Репутация:   94  


Цитата(silver47 @ 22.4.2011, 15:05) *
можно ли на время чтения из ком порта, засунуть это чтение в тот поток
Если чтение выполняет отдельный объект, а не просто функция GUI-класса, то можно объект отправить в другой поток
ищи в асистенте по ключу "moveToThread"
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 27.12.2024, 4:22