// SecushareQtView.cpp // // author: lurchi // date: 2016-02-01 #include "SecushareQtView.hpp" #include "config.h" #include #include #include #include using namespace redthread; Util::NotifyPipe SecushareQtView::shutdownPipe {}; SecushareQtView::SecushareQtView(int argc, char** argv) : QObject(), AbstractSecushareView(), mArgc {argc}, mArgv {argv}, mUserConfigModel {new QtUserConfigModel()} { std::cout << "SecushareQtView ctor" << std::endl; } SecushareQtView::~SecushareQtView() { } void SecushareQtView::catchUnixSignals( const std::vector& quitSignals, const std::vector& ignoreSignals ) { sigNotifier = new QSocketNotifier(shutdownPipe.receiverFd(), QSocketNotifier::Read, nullptr); QApplication::connect(sigNotifier, &QSocketNotifier::activated, &QApplication::quit); auto handler = [](int sig) -> void { shutdownPipe.notify(); }; // all these signals will be ignored. for(int sig : ignoreSignals) { signal(sig, SIG_IGN); } // each of these signals calls the handler (quits the QCoreApplication). for(int sig : quitSignals) { signal(sig, handler); } } int SecushareQtView::run() { QApplication app(mArgc, mArgv); QObject::connect(&app, &QApplication::aboutToQuit, this, &SecushareQtView::shutdownRequest); catchUnixSignals({SIGQUIT, SIGINT, SIGTERM, SIGHUP}); QQuickView view (QUrl::fromLocalFile(QML_DIR "/application.qml")); QObject* root = view.rootObject(); QQmlEngine *engine = QtQml::qmlEngine(root); //QObject::connect(root, SIGNAL(shutdownButtonClicked()), this, SIGNAL(shutdownRequest())); QObject::connect(engine, SIGNAL(quit()), this, SIGNAL(shutdownRequest())); QObject::connect(engine, SIGNAL(quit()), &app, SLOT(quit())); //view.setSource(QUrl::fromLocalFile(QML_DIR "/application.qml")); view.show(); return app.exec(); }