Russian Qt Forum
Ноябрь 23, 2024, 23:55 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Модель в отдельном потоке.  (Прочитано 6097 раз)
kalif
Гость
« : Февраль 12, 2011, 13:46 »

Всем привет.
У меня имеется QSqlQueryModel которая отображается в QTableView.
Подскажите возможно ли выкинуть модель в отдельный поток?
Записан
trot
Гость
« Ответ #1 : Февраль 12, 2011, 16:56 »

Возможно
Записан
CL0NE
Гость
« Ответ #2 : Февраль 12, 2011, 19:33 »

Как и любой другой qobject Подмигивающий
Записан
kalif
Гость
« Ответ #3 : Февраль 12, 2011, 21:17 »

А можно увидеть это в коде? А то я пытаюсь, но что-то ничего не выходит. Грустный
Записан
CL0NE
Гость
« Ответ #4 : Февраль 13, 2011, 22:39 »

http://blog.exys.org/entries/2010/QThread_affinity.html
Записан
kalif
Гость
« Ответ #5 : Февраль 15, 2011, 09:27 »

Так как написано в примере не работает.
Падает при запуске программы. Грустный
Записан
Странник
Гость
« Ответ #6 : Февраль 15, 2011, 11:25 »

в теории-то можно, конечно. на практике - тот еще геморрой из материала заказчика. особенно если учесть, что sql-запросы должны выполняться в том же потоке, в котором создано соединение с базой. межпотоковое взаимодействие модели и представления тоже может ой как удивить.
Записан
kalif
Гость
« Ответ #7 : Февраль 15, 2011, 20:24 »

Получилось таки добиться желаемого Улыбающийся
Код
C++ (Qt)
class ModelUpdateThread : public QThread
{
public:
   ModelUpdateThread();
 
private:
   QString query;
 
protected:
   void run();
 
public:
   void setQuery(QString query);
};
 
ModelUpdateThread::ModelUpdateThread()
{
   model = new QSqlQueryModel();
   model->moveToThread(this);
}
 
void ModelUpdateThread::run() {
 
   QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL","update");
   db.setHostName("localhost");
   db.setDatabaseName("test");
   db.setPort(3306);
   db.setUserName("user");
   db.setPassword("1234");
   db.open();
   model->setQuery(query,db);
   db.close();
 
}
 
void ModelUpdateThread::setQuery(QString query) {
 
   this->query = query;
   this->start();
}
 

Эту модель из класса и вставляем потом в вид.

Еще можно тут почитать про асинхронный доступ к бд.
« Последнее редактирование: Февраль 15, 2011, 20:40 от kalif » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.123 секунд. Запросов: 21.