From 548d8d72deaba76b2d2fc21210cf3e7870eb4cf8 Mon Sep 17 00:00:00 2001 From: lepelley Date: Tue, 17 Aug 2010 03:52:17 +0200 Subject: [PATCH] Update async methods! Now valid ip is detected --- accountdialog.cpp | 72 +++++++++++++++++++++++++++++++++++++++-------------- accountdialog.h | 9 ++++--- 2 files changed, 60 insertions(+), 21 deletions(-) diff --git a/accountdialog.cpp b/accountdialog.cpp index b64f7e8..c87215a 100644 --- a/accountdialog.cpp +++ b/accountdialog.cpp @@ -6,13 +6,32 @@ #include #include #include -#include +#include + + + +QListWidgetItem asyncTestItem(const QListWidgetItem &item) +{ + + QListWidgetItem item2= item; + item2.setText("boby"); + + return item; + +} + + + + AccountDialog::AccountDialog(QWidget *parent) : QDialog(parent), ui(new Ui::AccountDialog) { ui->setupUi(this); + mFuturWatcher = new QFutureWatcher(this); + connect(mFuturWatcher,SIGNAL(resultReadyAt(int)),this,SLOT(setAsyncItem(int))); + connect(ui->addButton,SIGNAL(clicked()),this,SLOT(add())); connect(ui->editButton,SIGNAL(clicked()),this,SLOT(edit())); connect(ui->remButton,SIGNAL(clicked()),this,SLOT(rem())); @@ -60,6 +79,7 @@ void AccountDialog::load() QString useKey = settings.value("config/currentKey").toString(); + QList asycItems; settings.beginGroup("account"); foreach ( QString key, settings.allKeys()) @@ -74,42 +94,58 @@ void AccountDialog::load() item->setFont(font); } ui->listWidget->addItem(item); + asycItems.append(*item); } settings.endGroup(); + // ... create and add in the list widget + + // QFuture itemFutur = QtConcurrent::mapped(asycItems, asyncTestItem); -} + mFuturWatcher->setFuture(QtConcurrent::mapped(asycItems, asyncTestItem)); +} -void AccountDialog::asyncTestConnection() +QListWidgetItem AccountDialog::asyncTestItem(const QListWidgetItem& item) { + QListWidgetItem newItem = item; + + QTcpSocket * socket = new QTcpSocket; QSettings settings; - settings.beginGroup("account"); + QString host = settings.value("account/"+item.text()).toString(); + QStringList hostSplit = host.split(":"); + QString ip = hostSplit.at(0); + QString port = hostSplit.at(1); - for ( int i=0; ilistWidget->count(); ++i) - { - QListWidgetItem * item = ui->listWidget->item(i); - QString key = item->text(); - QString hostIp = settings.value(key).toString(); - qDebug()<connectToHost(hostIp, 80); + socket->connectToHost(ip,port.toInt()); - if (socket->waitForConnected(1000)) - item->setBackgroundColor(Qt::green); - else - item->setBackgroundColor(Qt::red); + if (socket->waitForConnected(1000)) + newItem.setBackgroundColor(Qt::green); + else + newItem.setBackgroundColor(Qt::red); + return newItem; + + +} + + + +void AccountDialog::setAsyncItem(int row) // EDIT THE ROW AFTER ASYNC FUNCTION FINISHED +{ + QListWidgetItem newItem = mFuturWatcher->resultAt(row); + QListWidgetItem * item = ui->listWidget->item(row); + + item->setBackgroundColor(newItem.backgroundColor()); - } - settings.endGroup(); } + void AccountDialog::edit() { QString currentIp = ui->listWidget->currentItem()->data(Qt::UserRole).toString(); diff --git a/accountdialog.h b/accountdialog.h index 4e9ce4d..f898183 100644 --- a/accountdialog.h +++ b/accountdialog.h @@ -2,7 +2,8 @@ #define ACCOUNTDIALOG_H #include - +#include +#include namespace Ui { class AccountDialog; } @@ -14,7 +15,8 @@ class AccountDialog : public QDialog public: explicit AccountDialog(QWidget *parent = 0); ~AccountDialog(); - void asyncTestConnection(); + static QListWidgetItem asyncTestItem(const QListWidgetItem& item); + static QString currentIp(); @@ -25,9 +27,10 @@ public slots: void use(); void load(); void enableUi(); - + void setAsyncItem(int row); private: Ui::AccountDialog *ui; + QFutureWatcher * mFuturWatcher; }; #endif // ACCOUNTDIALOG_H -- 1.7.9.5