diff --git a/pglab/ConnectionConfigurationWidget.cpp b/pglab/ConnectionConfigurationWidget.cpp index 00bab32..72cf418 100644 --- a/pglab/ConnectionConfigurationWidget.cpp +++ b/pglab/ConnectionConfigurationWidget.cpp @@ -24,6 +24,7 @@ #define SET_OBJECT_NAME(var) var->setObjectName(#var) + void ConnectionConfigurationWidget::editExistingInWindow(ConnectionController *connection_controller, const ConnectionConfig &cfg, std::function save_func) { @@ -43,9 +44,6 @@ void ConnectionConfigurationWidget::editExistingInWindow(ConnectionController *c win->setAttribute( Qt::WA_DeleteOnClose, true ); QObject::connect(btn_hbox, &QDialogButtonBox::accepted, [w, win, save_func] () { -// auto cc = w->data(); -// auto grp = w->group(); -// connection_controller->getConnectionTreeModel()->save(grp, cc); save_func(*w); win->accept(); }); @@ -61,7 +59,9 @@ void ConnectionConfigurationWidget::editExistingInWindow(ConnectionController *c } } -ConnectionConfigurationWidget::ConnectionConfigurationWidget(ConnectionController *connection_controller, QWidget *parent) +ConnectionConfigurationWidget::ConnectionConfigurationWidget( + ConnectionController *connection_controller, + QWidget *parent) : QWidget(parent) , m_connectionController(connection_controller) , m_connectionModel(connection_controller->getConnectionTreeModel()) @@ -168,9 +168,6 @@ ConnectionConfigurationWidget::ConnectionConfigurationWidget(ConnectionControlle formLayout->addRow(btnTest, lblResult); setLayout(formLayout); - connect(&TestWatcher, &QFutureWatcher::finished, this, - &ConnectionConfigurationWidget::handleTestResult); - retranslateUi(); } @@ -255,15 +252,19 @@ void ConnectionConfigurationWidget::testConnection() auto cc = data(); cc.setPassword(password); - QFuture result = QtConcurrent::run([cc] { return TestConnection(cc); }); - TestWatcher.setFuture(result); + + auto qthis = QPointer(this); + QFuture result = QtConcurrent::run([cc] { + return TestConnection(cc); + }).then(qApp, [qthis](TestConnectionResult result) { + if (qthis) { + qthis.data()->handleTestResult(result); + } + }); } -void ConnectionConfigurationWidget::handleTestResult() +void ConnectionConfigurationWidget::handleTestResult(TestConnectionResult result) { - auto f = TestWatcher.future(); - auto result = f.result(); - lblResult->setText(result.message()); QString current = cmbDbname->currentText(); cmbDbname->clear(); diff --git a/pglab/ConnectionConfigurationWidget.h b/pglab/ConnectionConfigurationWidget.h index 05f3b39..a67fbf4 100644 --- a/pglab/ConnectionConfigurationWidget.h +++ b/pglab/ConnectionConfigurationWidget.h @@ -3,7 +3,6 @@ #include #include -#include #include #include "TestConnection.h" @@ -20,7 +19,6 @@ class QSpinBox; class ConnectionTreeModel; - class ConnectionConfigurationWidget : public QWidget { Q_OBJECT @@ -28,14 +26,15 @@ public: static void editExistingInWindow(ConnectionController *ctrl, const ConnectionConfig &cfg, std::function save_func); - explicit ConnectionConfigurationWidget(ConnectionController *connection_controller, QWidget *parent = nullptr); + explicit ConnectionConfigurationWidget( + ConnectionController *connection_controller, + QWidget *parent = nullptr); void retranslateUi(); void setData(const ConnectionConfig &cfg); ConnectionConfig data() const; QString group() const; bool savePassword() const; -signals: public slots: void testConnection(); @@ -77,13 +76,7 @@ private: QLabel *lblResult; QFormLayout *formLayout; - - QFutureWatcher TestWatcher; - -private slots: - void handleTestResult(); + void handleTestResult(TestConnectionResult result); }; - - #endif // CONNECTIONCONFIGURATIONWIDGET_H