Название: Помогите убрать дополнительные строки в таблице Отправлено: neosapient от Июль 21, 2010, 13:58 Здравствуйте.
Есть большая таблица в БД, которую требуется перечитывать каждые n секунд. Чтобы графика не подвисала на время обновления таблицы, я вынес её в дополнительный поток. Проблема в том, что QTableView обображает таблицу, а затем ещё столько же пустых строк. (http://s49.radikal.ru/i125/1007/e1/c474d9471909.png) (http://www.radikal.ru) Откуда беруться эти дополнительные строки ? Как от них избавиться ? MyThread.h Код: #ifndef MYTHREAD_H MyThread.cpp Код: #include "MyThread.h" main.cpp Код: #include <QtGui> Название: Re: Помогите убрать дополнительные строки в таблице Отправлено: lit-uriy от Июль 21, 2010, 16:16 >>Чтобы графика не подвисала на время обновления таблицы, я вынес её в дополнительный поток.
сто раз уже говорили, графику нельзя выносить из главного потока Название: Re: Помогите убрать дополнительные строки в таблице Отправлено: neosapient от Июль 21, 2010, 16:56 >>сто раз уже говорили, графику нельзя выносить из главного потока
Так я и не выношу графику из главного потока. В отдельный поток я вынес обращение к БД. Название: Re: Помогите убрать дополнительные строки в таблице Отправлено: lit-uriy от Июль 21, 2010, 18:19 модель у тебя точно в отдельном потоке не работает. Т.к. создана она в основном потоке, а в доп потоке ты в неё запрос устанавливаешь.
Может это и является виной пустых строк. Название: Re: Помогите убрать дополнительные строки в таблице Отправлено: neosapient от Июль 21, 2010, 18:44 модель у тебя точно в отдельном потоке не работает. Т.к. создана она в основном потоке, а в доп потоке ты в неё запрос устанавливаешь. Может это и является виной пустых строк. Возможно. Я могу создать модель в классе и вне класса MyThread (во втором случае мне следует передать указатель на модель в класс). Глюк не исчезает, так как во всех вариантах я выделяю память под модель в главном потоке, и это происходит прежде чем я запукаю поток для забора данных. Моя цель - выполнять запрос к БД в отдельном потоке, чтобы пользовательский интерфейс не подвисал. По этой причине в дополнительном потоке устанавливаю запрос в модель. Я рассчитываю, что запрос будет выполняться в дочернем потоке. Или я заблуждаюсь и он будет выполняться ещё где то ? Название: Re: Помогите убрать дополнительные строки в таблице Отправлено: lit-uriy от Июль 21, 2010, 19:06 Цитировать Потоки и модуль SQL Соединение может использоваться только внутри создавшего его потока. Перемещение соединений между потоками и создание запросов в другой поток не поддерживается. Название: Re: Помогите убрать дополнительные строки в таблице Отправлено: lit-uriy от Июль 21, 2010, 19:09 попробуй модель создать в отдельном потоке, может так будет работать. Либо создай соединение с БД, в том же потоке, где выполняешь запрос.
П.С. В описании QSqlQueryModel нет упоминания о том, что функции этого класса реентерабельны. Т.е. их по идее нельзя вызывать в потоке отличном от потока самого объекта |