Имеется вот такой код:
#include "dialog.h"
#include "ui_dialog.h"
#include
Dialog::Dialog(QWidget* parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::doTask(int& number, QString& ip, int& pt)
{
QNetworkAccessManager manager;
QNetworkReply* reply = qobject_cast
QNetworkRequest request(QUrl(ui->url->text()));
reply = manager.get(request);
QEventLoop loop;
connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
QString source;
source.append(QString::fromLocal8Bit(reply->readAll()));
if (source.contains(ui->search->text(), Qt::CaseInsensitive))
{
qDebug() << "Okay.";
}
else
{
qDebug() << ">>> BAD <<<";
}
qDebug() << "TaskID: " << number;
qDebug() << "IP: " << ip;
qDebug() << "Port: " << pt;
qDebug() << "MS: " << ui->wait->value();
QThread::currentThread()->msleep(ui->wait->value());
qDebug() << "Processing " << " - "" of thread: " << QThread::currentThreadId();
qDebug() << "Stopped ";
}
void Dialog::on_pushButton_clicked()
{
QVector
QProgressDialog pdialog("", "", 0, 100, this, Qt::Dialog | Qt::FramelessWindowHint | Qt::WindowTitleHint | Qt::CustomizeWindowHint);
pdialog.setLabelText("Processing..");
pdialog.setCancelButtonText("Stop");
QFutureWatcher
connect(&pdialog,SIGNAL(canceled()), &watcher,SLOT(cancel()));
connect(&watcher, SIGNAL(finished()), &pdialog, SLOT(reset()));
connect(&watcher,SIGNAL(progressRangeChanged(int,int)), &pdialog,SLOT(setRange(int,int)));
connect(&watcher, SIGNAL(progressValueChanged(int)), &pdialog,SLOT(setValue(int)));
QThreadPool::globalInstance()->setMaxThreadCount(ui->spinBox_2->value());
QString ip;
int pt;
auto q_future = QtConcurrent::map(vector, [this, &ip, &pt](int& number)
{
ip = "127.0.0.1";
pt = 80;
doTask(number, ip, pt);
});
watcher.setFuture(q_future);
pdialog.exec();
watcher.waitForFinished();
if (watcher.isCanceled())
{
qDebug() << "canceled!!!";
QMessageBox::critical(this, "Canceled", "You clicked cancel!");
}
else
{
qDebug() << "finished!!!";
QMessageBox::information(this, "finished", "All done!");
}
}
void Dialog::on_proxy_clicked()
{
auto proxy = QFileDialog::getOpenFileName(nullptr,
QObject::tr("Add proxy"),
QCoreApplication::applicationDirPath(),
QObject::tr("Text file (*.txt)"));
if (true == proxy.isEmpty())
{
QMessageBox::critical(nullptr, "Warning", "Empty path proxy list.");
return; // передумали
}
QFile file(proxy);
QString n;
if (file.open(QIODevice::ReadOnly))
n = QTextStream(&file).readAll();
QRegExp rx("[\:\;]");
QRegExp rx2("[
]");
QString str(n);
QList
ui->cproxy->setNum(result.count());
}
но не совсем ясно как передать данные из result (on_proxy_clicked()) в метод on_pushButton_clicked для дальнейшей обработки (перебор ip и port (pt) )
Какое решение посоветуете в коде?
P.S. Просто прокси чекер.
Ответ
Как вариант, можно слот on_pushButton_clicked() дополнить аргументом, имеющим значение по умолчанию. Получится что-то вроде такого в объявлении:
void on_pushButton_clicked(const QList
... и
void Dialog::on_pushButton_clicked(const QList
... в реализации.
Таким образом, сохраняется возможность вызывать слот по кнопке, а также появляется средство передачи в него списка данных.
Комментариев нет:
Отправить комментарий