Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
|
sidsukana |
12.1.2011, 18:31
Сообщение
#1
|
|
Участник ![]() ![]() Группа: Участник Сообщений: 158 Регистрация: 23.12.2010 Из: Челябинск Пользователь №: 2296 Спасибо сказали: 10 раз(а) Репутация: 2
|
Здравствуйте. Есть такая проблема.
Есть объект - интерфейс, есть объект поиска. При нажатии кнопки поиск, происходит создание потока, и в потоке создается объект поиска. Поиск - формирует QStandardItemModel и применяет его на QTableView в объект интерфейса посредством ивентов. (забыл сказать, что вынесено все в поток изза того что формируется модель 10000+ строк и 2 столбца, поиск ведется по одному символу из другого бинарного файла (ну это не важно так как сам поиск в цикле проходит быстро) Так вот, при первом запуске программы, первый поиск проходит реактивно и буквально за секунду табличка сформирована и результат есть в вьювере. Но стоит запустить снова такой же поиск как интерфейс зависает и все работает как будто без потоков и ивентов(блок интерфейса на 5-10 секунд и тд.) Самое интересное что поток проходит успешно и завершается. А зависание происходит после выполнения потока. Прошу помощи |
|
|
|
|
xls |
13.1.2011, 12:37
Сообщение
#2
|
|
Студент ![]() Группа: Участник Сообщений: 44 Регистрация: 6.9.2010 Пользователь №: 2013 Спасибо сказали: 7 раз(а) Репутация: 2
|
Вопрос : передаете ли вы сформированную в доппотоке модель в основной поток ( moveToThread) ?. Если нет, то это надо делать.
Проблема может быть в том, что при присвоении новой модели QTableView он пытается удалить предыдущую модель и время уходит на это. В этом случае можно сделать так: отсоединить старую модель от QTableView , назначить новую , послать старую в другой поток и вызвать ее метод deleteLater(). Более точную инфу может показать только вскрытие ) (исходного кода). |
|
|
|
|
sidsukana |
13.1.2011, 13:32
Сообщение
#3
|
|
Участник ![]() ![]() Группа: Участник Сообщений: 158 Регистрация: 23.12.2010 Из: Челябинск Пользователь №: 2296 Спасибо сказали: 10 раз(а) Репутация: 2
|
Нет не использовал. Т.е при создании потока в конструкторе вызывать moveToThread(this) ? А как из этого потока допустим отсылать данные в основной не через ивент? И можете подсказать, что это за метод отсоединения модели от вьювера?
|
|
|
|
|
sidsukana |
14.1.2011, 1:09
Сообщение
#4
|
|
Участник ![]() ![]() Группа: Участник Сообщений: 158 Регистрация: 23.12.2010 Из: Челябинск Пользователь №: 2296 Спасибо сказали: 10 раз(а) Репутация: 2
|
Link жду помощи
|
|
|
|
|
sidsukana |
14.1.2011, 16:18
Сообщение
#5
|
|
Участник ![]() ![]() Группа: Участник Сообщений: 158 Регистрация: 23.12.2010 Из: Челябинск Пользователь №: 2296 Спасибо сказали: 10 раз(а) Репутация: 2
|
Опять я прослакал
|
|
|
|
![]() ![]() ![]() |
|
Текстовая версия | Сейчас: 30.12.2025, 14:26 |