Advertisement
Guest User

Untitled

a guest
Jan 31st, 2019
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.75 KB | None | 0 0
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3.  
  4. #include <QFuture>
  5. #include <QFutureWatcher>
  6. #include <QtConcurrent>
  7.  
  8. void MainWindow::on_pushButton_clicked()
  9. {
  10.     QFuture<QSqlTableModel*> future = QtConcurrent::run(
  11.         [this]()
  12.         {
  13.             // Исполняем этот код в другом потоке
  14.             //QSqlDatabase objDatabase;
  15.             objDatabase = QSqlDatabase::addDatabase("QMYSQL");
  16.             objDatabase.setDatabaseName("librarydb");
  17.             objDatabase.setHostName("127.0.0.1");
  18.             objDatabase.setPort(3306);
  19.             objDatabase.setUserName("hays0503");
  20.             objDatabase.setPassword("hays0503");
  21.             objDatabase.open();
  22.  
  23.             //QSqlTableModel *objTableModel;
  24.             objTableModel = new QSqlTableModel(this);
  25.             objTableModel->setTable("author");
  26.             if (!objTableModel->select())
  27.             {
  28.                 delete objTableModel;
  29.                 objTableModel = nullptr;
  30.                 qDebug()<<"Error";
  31.             }
  32.             return objTableModel;
  33.         });
  34.     QFutureWatcher<QSqlTableModel*> *watcher = new QFutureWatcher<QSqlTableModel*>(this);
  35.     connect(watcher, SIGNAL(finished()), watcher,
  36.         [this, watcher]()
  37.         {
  38.             // Запускаем этот код в UI потоке, когда объект future завершит свою работу в рабочем потоке
  39.             ui->tableView->setModel(watcher->result());
  40.             watcher->deleteLater(); // Удалим ненужный watcher
  41.         }, Qt::QueuedConnection);
  42.  
  43.      watcher->setFuture(future); // Связываем watcher с feature. Это быстрая операция и не тормозит поток UI
  44. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement