int main(int argc, char ** argv) { using Q = QObject; QApplication app{argc, argv}; QWidget ui; QVBoxLayout layout{&ui}; QTextBrowser log; QProgressBar bar; QPushButton scan{"Scan localhost"}; layout.addWidget(&log); layout.addWidget(&bar); layout.addWidget(&scan); bar.setRange(1, 65535); ui.show(); Scanner scanner; Q::connect(&scan, &QPushButton::clicked, &scanner, [&]{ scan.setEnabled(false); scanner.start(); }); Q::connect(&scanner, &Scanner::hasResult, &log, [&](int port, bool isOpen){ bar.setValue(port); if (!isOpen) return; auto color = isOpen ? QStringLiteral("green") : QStringLiteral("red"); auto state = isOpen ? QStringLiteral("open") : QStringLiteral("closed"); log.append(QStringLiteral("<font color=\"%1\">Port %2 is %3.</font><br/>"). arg(color).arg(port).arg(state)); }); Q::connect(&scanner, &Scanner::done, &scan, [&]{ bar.reset(); scan.setEnabled(true); }); return app.exec(); }
void inc_progress_bar(int, int, void *p) { QProgressBar *bar = (QProgressBar *)p; int value = bar->value(); if (value == bar->maximum()) { bar->reset(); } else { bar->setValue(value +1); } }