Use then construct instead of future watcher for test connection.ConnectionConfigurationWidget
The QPointer is detect the window has been destroyed.
This commit is contained in:
parent
90851ef950
commit
521e5d7370
2 changed files with 18 additions and 24 deletions
|
|
@ -24,6 +24,7 @@
|
||||||
#define SET_OBJECT_NAME(var) var->setObjectName(#var)
|
#define SET_OBJECT_NAME(var) var->setObjectName(#var)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void ConnectionConfigurationWidget::editExistingInWindow(ConnectionController *connection_controller, const ConnectionConfig &cfg,
|
void ConnectionConfigurationWidget::editExistingInWindow(ConnectionController *connection_controller, const ConnectionConfig &cfg,
|
||||||
std::function<void(ConnectionConfigurationWidget&)> save_func)
|
std::function<void(ConnectionConfigurationWidget&)> save_func)
|
||||||
{
|
{
|
||||||
|
|
@ -43,9 +44,6 @@ void ConnectionConfigurationWidget::editExistingInWindow(ConnectionController *c
|
||||||
win->setAttribute( Qt::WA_DeleteOnClose, true );
|
win->setAttribute( Qt::WA_DeleteOnClose, true );
|
||||||
|
|
||||||
QObject::connect(btn_hbox, &QDialogButtonBox::accepted, [w, win, save_func] () {
|
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);
|
save_func(*w);
|
||||||
win->accept();
|
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)
|
: QWidget(parent)
|
||||||
, m_connectionController(connection_controller)
|
, m_connectionController(connection_controller)
|
||||||
, m_connectionModel(connection_controller->getConnectionTreeModel())
|
, m_connectionModel(connection_controller->getConnectionTreeModel())
|
||||||
|
|
@ -168,9 +168,6 @@ ConnectionConfigurationWidget::ConnectionConfigurationWidget(ConnectionControlle
|
||||||
formLayout->addRow(btnTest, lblResult);
|
formLayout->addRow(btnTest, lblResult);
|
||||||
setLayout(formLayout);
|
setLayout(formLayout);
|
||||||
|
|
||||||
connect(&TestWatcher, &QFutureWatcher<TestConnectionResult>::finished, this,
|
|
||||||
&ConnectionConfigurationWidget::handleTestResult);
|
|
||||||
|
|
||||||
retranslateUi();
|
retranslateUi();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -255,15 +252,19 @@ void ConnectionConfigurationWidget::testConnection()
|
||||||
|
|
||||||
auto cc = data();
|
auto cc = data();
|
||||||
cc.setPassword(password);
|
cc.setPassword(password);
|
||||||
QFuture<TestConnectionResult> result = QtConcurrent::run([cc] { return TestConnection(cc); });
|
|
||||||
TestWatcher.setFuture(result);
|
auto qthis = QPointer(this);
|
||||||
|
QFuture<void> 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());
|
lblResult->setText(result.message());
|
||||||
QString current = cmbDbname->currentText();
|
QString current = cmbDbname->currentText();
|
||||||
cmbDbname->clear();
|
cmbDbname->clear();
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@
|
||||||
|
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
#include <QUuid>
|
#include <QUuid>
|
||||||
#include <QFutureWatcher>
|
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
#include "TestConnection.h"
|
#include "TestConnection.h"
|
||||||
|
|
||||||
|
|
@ -20,7 +19,6 @@ class QSpinBox;
|
||||||
|
|
||||||
class ConnectionTreeModel;
|
class ConnectionTreeModel;
|
||||||
|
|
||||||
|
|
||||||
class ConnectionConfigurationWidget : public QWidget
|
class ConnectionConfigurationWidget : public QWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
@ -28,14 +26,15 @@ public:
|
||||||
static void editExistingInWindow(ConnectionController *ctrl, const ConnectionConfig &cfg,
|
static void editExistingInWindow(ConnectionController *ctrl, const ConnectionConfig &cfg,
|
||||||
std::function<void(ConnectionConfigurationWidget&)> save_func);
|
std::function<void(ConnectionConfigurationWidget&)> save_func);
|
||||||
|
|
||||||
explicit ConnectionConfigurationWidget(ConnectionController *connection_controller, QWidget *parent = nullptr);
|
explicit ConnectionConfigurationWidget(
|
||||||
|
ConnectionController *connection_controller,
|
||||||
|
QWidget *parent = nullptr);
|
||||||
|
|
||||||
void retranslateUi();
|
void retranslateUi();
|
||||||
void setData(const ConnectionConfig &cfg);
|
void setData(const ConnectionConfig &cfg);
|
||||||
ConnectionConfig data() const;
|
ConnectionConfig data() const;
|
||||||
QString group() const;
|
QString group() const;
|
||||||
bool savePassword() const;
|
bool savePassword() const;
|
||||||
signals:
|
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void testConnection();
|
void testConnection();
|
||||||
|
|
@ -77,13 +76,7 @@ private:
|
||||||
QLabel *lblResult;
|
QLabel *lblResult;
|
||||||
QFormLayout *formLayout;
|
QFormLayout *formLayout;
|
||||||
|
|
||||||
|
void handleTestResult(TestConnectionResult result);
|
||||||
QFutureWatcher<TestConnectionResult> TestWatcher;
|
|
||||||
|
|
||||||
private slots:
|
|
||||||
void handleTestResult();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif // CONNECTIONCONFIGURATIONWIDGET_H
|
#endif // CONNECTIONCONFIGURATIONWIDGET_H
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue