Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- #include <QFuture>
- #include <QFutureWatcher>
- #include <QtConcurrent>
- void MainWindow::on_pushButton_clicked()
- {
- QFuture<QSqlTableModel*> future = QtConcurrent::run(
- [this]()
- {
- // Исполняем этот код в другом потоке
- //QSqlDatabase objDatabase;
- objDatabase = QSqlDatabase::addDatabase("QMYSQL");
- objDatabase.setDatabaseName("librarydb");
- objDatabase.setHostName("127.0.0.1");
- objDatabase.setPort(3306);
- objDatabase.setUserName("hays0503");
- objDatabase.setPassword("hays0503");
- objDatabase.open();
- //QSqlTableModel *objTableModel;
- objTableModel = new QSqlTableModel(this);
- objTableModel->setTable("author");
- if (!objTableModel->select())
- {
- delete objTableModel;
- objTableModel = nullptr;
- qDebug()<<"Error";
- }
- return objTableModel;
- });
- QFutureWatcher<QSqlTableModel*> *watcher = new QFutureWatcher<QSqlTableModel*>(this);
- connect(watcher, SIGNAL(finished()), watcher,
- [this, watcher]()
- {
- // Запускаем этот код в UI потоке, когда объект future завершит свою работу в рабочем потоке
- ui->tableView->setModel(watcher->result());
- watcher->deleteLater(); // Удалим ненужный watcher
- }, Qt::QueuedConnection);
- watcher->setFuture(future); // Связываем watcher с feature. Это быстрая операция и не тормозит поток UI
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement