AppController::AppController() : lastTick_(0), frameCounter_(0), frameRate_(0) { model_ = new AppModel(); gui_ = new MainWindow(model_, this); // register data update functions to model boost::function<void()> data_cb = boost::bind(&AppController::dataUpdated, this); update_con_ = model_->registerCallback(data_cb); // register pointpick callback of model to gui boost::function<void(const pcl::visualization::PointPickingEvent &)> pointpick_cb = boost::bind(&AppModel::pickPoint, model_, _1); gui_->registerPointPickCallback(pointpick_cb); // connect signal / slots to gui connect(this, SIGNAL(newCloud()), gui_, SLOT(updatePointCloud())); connect(this, SIGNAL(newSmallCloud(void)), gui_, SLOT(updateSmallPointCloud(void))); qRegisterMetaType<QImage>("QImage"); connect(this, SIGNAL(newRgbImage(QImage)), gui_, SLOT(updateRgbImage(QImage))); qRegisterMetaType<QString>("QString"); connect(this, SIGNAL(newStatusMessage(QString)), gui_, SLOT(updateStatusMessage(QString))); gui_->show(); }
void AppController::dataUpdated() { ++frameCounter_; if (frameCounter_ == 10) { double current_tick = cv::getTickCount(); frameRate_ = frameCounter_ / ((current_tick - lastTick_) / cv::getTickFrequency()); lastTick_ = current_tick; frameCounter_ = 0; } emit newSmallCloud(); emit newCloud(); QImage * image = model_->getLastImage(); if (!image->isNull()) { QImage sImage = image->scaled(400, 300); emit newRgbImage(sImage); } QString status = QString("Final fps = %1 Grabber Time = %2 ms").arg(frameRate_, 0, 'f', 1).arg(model_->getGrabberTime(), 0, 'f', 1); emit newStatusMessage(status); }
void TestSettingsWidget::account() { SettingsWidget * settingsWidget = new SettingsWidget(); Ui::SettingsWidget *ui = settingsWidget->_ui; QSignalSpy sig_status(settingsWidget, SIGNAL(newStatusMessage(QString, QString))); TarsnapAccountDialog *tarsnapAccount = &settingsWidget->_tarsnapAccount; VISUAL_INIT(settingsWidget); // Send stats info. settingsWidget->overallStatsChanged(5, 4, 3, 2, 1); QCOMPARE(ui->accountArchivesCountLabel->text(), QString("1")); QCOMPARE(ui->accountTotalSizeLabel->text(), QString("5 B")); QCOMPARE(ui->accountActualSizeLabel->text(), QString("2 B")); QCOMPARE(ui->accountStorageSavedLabel->text(), QString("3 B")); VISUAL_WAIT; // Trigger an error message that we have to click away. QMetaObject::invokeMethod(ui->updateAccountButton, "clicked", Qt::QueuedConnection); QMetaObject::invokeMethod(&tarsnapAccount->_popup, "close", Qt::QueuedConnection); VISUAL_WAIT; // Set username, machine name, key. ui->accountUserLineEdit->setText("edited-user"); ui->accountMachineLineEdit->setText("edited-mn"); ui->accountMachineKeyLineEdit->setText("edited-mk"); VISUAL_WAIT; // Nuke button, reject dialog. QMetaObject::invokeMethod(ui->nukeArchivesButton, "clicked", Qt::QueuedConnection); QMetaObject::invokeMethod(&settingsWidget->_nukeConfirmationDialog._inputDialog, "reject", Qt::QueuedConnection); QTest::qWait(200); QVERIFY(sig_status.takeFirst().at(0).toString() == QString("Nuke confirmation requested.")); QVERIFY(sig_status.takeFirst().at(0).toString() == QString("Nuke cancelled.")); VISUAL_WAIT; // It would be nice to test the nuke button with invalid confirmation text, // but QInputDialog::setTextValue() is not a slot and ::invokeMethod() // only works on slots. // Call commitSettings() manually because setText() doesn't trigger // editingFinished(), which is what's attached to the signal. settingsWidget->commitSettings(); // Check saved settings TSettings settings; QVERIFY(settings.value("tarsnap/user", "") == QString("edited-user")); QVERIFY(settings.value("tarsnap/machine", "") == QString("edited-mn")); QVERIFY(settings.value("tarsnap/key", "") == QString("edited-mk")); delete settingsWidget; }