From 13a29bcc947e2ec3a46b08b45b318506669627a2 Mon Sep 17 00:00:00 2001 From: sunwen Date: Thu, 18 Aug 2022 17:09:16 +0800 Subject: [PATCH] Add ScreenSaver. --- CMakeLists.txt | 12 ++- cfgs/usct-product | 3 + cfgs/usct-product.json | 3 + src/dialogs/DialogManager.cpp | 22 +++- src/dialogs/DialogManager.h | 4 + src/event/EventCenter.h | 3 +- src/forms/settings/GeneralForm.cpp | 13 ++- src/json/jsonobject.cpp | 5 +- src/json/jsonobject.h | 2 + src/main.cpp | 5 +- src/screensaver/ScreenSaverWindow.cpp | 146 ++++++++++++++++++++++++++ src/screensaver/ScreenSaverWindow.h | 54 ++++++++++ src/utilities/Locker.cpp | 23 +++- src/utilities/Locker.h | 3 + src/windows/MainWindow.cpp | 7 +- src/windows/MainWindow.h | 3 +- 16 files changed, 292 insertions(+), 16 deletions(-) create mode 100644 src/screensaver/ScreenSaverWindow.cpp create mode 100644 src/screensaver/ScreenSaverWindow.h diff --git a/CMakeLists.txt b/CMakeLists.txt index ce1eaff..9278ea9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -37,7 +37,7 @@ source_group(TREE ${CMAKE_SOURCE_DIR} FILES ${project_cxx}) source_group(TREE ${CMAKE_SOURCE_DIR} FILES ${project_cc}) source_group(TREE ${CMAKE_SOURCE_DIR} FILES ${project_c}) -find_package(Qt5 COMPONENTS Core Widgets Gui OpenGL Sql VirtualKeyboard Network REQUIRED) +find_package(Qt5 COMPONENTS Core Widgets Gui OpenGL Sql VirtualKeyboard Network REQUIRED Multimedia MultimediaWidgets) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) file(GLOB_RECURSE project_uis ./src/*.ui) @@ -78,11 +78,11 @@ endif() if(UNIX AND USE_SHIMLIB) link_directories(/usr/local/lib64) - target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Widgets Qt5::Gui Qt5::OpenGL Qt5::Sql Qt5::VirtualKeyboard Qt5::Network pthread usct_shim dmapi log4c cunit ctomat hdf5 matio m) + target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Widgets Qt5::Gui Qt5::OpenGL Qt5::Sql Qt5::VirtualKeyboard Qt5::Network Qt5::Multimedia Qt5::MultimediaWidgets pthread usct_shim dmapi log4c cunit ctomat hdf5 matio m) elseif(UNIX) - target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Widgets Qt5::Gui Qt5::OpenGL Qt5::Sql Qt5::VirtualKeyboard Qt5::Network pthread) + target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Widgets Qt5::Gui Qt5::OpenGL Qt5::Sql Qt5::VirtualKeyboard Qt5::Network Qt5::Multimedia Qt5::MultimediaWidgets pthread) else() - target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Widgets Qt5::Gui Qt5::OpenGL Qt5::Sql Qt5::VirtualKeyboard Qt5::Network) + target_link_libraries(${PROJECT_NAME} Qt5::Core Qt5::Widgets Qt5::Gui Qt5::OpenGL Qt5::Sql Qt5::VirtualKeyboard Qt5::Network Qt5::Multimedia Qt5::MultimediaWidgets) endif() if(MSVC) @@ -125,6 +125,10 @@ if(UNIX) install(CODE "file(RENAME ${CMAKE_INSTALL_BINDIR}/libQt5VirtualKeyboard.so.5.12.0 ${CMAKE_INSTALL_BINDIR}/libQt5VirtualKeyboard.so.5)") install(CODE "file(COPY ${qt_LIB_DIR}/libQt5OpenGL.so.5.12.0 DESTINATION ${CMAKE_INSTALL_BINDIR})") install(CODE "file(RENAME ${CMAKE_INSTALL_BINDIR}/libQt5OpenGL.so.5.12.0 ${CMAKE_INSTALL_BINDIR}/libQt5OpenGL.so.5)") + install(CODE "file(COPY ${qt_LIB_DIR}/libQt5Multimedia.so.5.12.0 DESTINATION ${CMAKE_INSTALL_BINDIR})") + install(CODE "file(RENAME ${CMAKE_INSTALL_BINDIR}/libQt5Multimedia.so.5.12.0 ${CMAKE_INSTALL_BINDIR}/libQt5Multimedia.so.5)") + install(CODE "file(COPY ${qt_LIB_DIR}/libQt5MultimediaWidgets.so.5.12.0 DESTINATION ${CMAKE_INSTALL_BINDIR})") + install(CODE "file(RENAME ${CMAKE_INSTALL_BINDIR}/libQt5MultimediaWidgets.so.5.12.0 ${CMAKE_INSTALL_BINDIR}/libQt5MultimediaWidgets.so.5)") install(CODE "file(COPY ${qt_LIB_DIR}/libQt5Widgets.so.5.12.0 DESTINATION ${CMAKE_INSTALL_BINDIR})") install(CODE "file(RENAME ${CMAKE_INSTALL_BINDIR}/libQt5Widgets.so.5.12.0 ${CMAKE_INSTALL_BINDIR}/libQt5Widgets.so.5)") install(CODE "file(COPY ${qt_LIB_DIR}/libQt5Qml.so.5.12.0 DESTINATION ${CMAKE_INSTALL_BINDIR})") diff --git a/cfgs/usct-product b/cfgs/usct-product index 92dac2a..ef5b5ac 100644 --- a/cfgs/usct-product +++ b/cfgs/usct-product @@ -70,5 +70,8 @@ "worklistfilter": { "default": "Today", "lists": "Today;Recent3Days;ThisWeek;ThisMonth" + }, + "screensaver": { + "content": "screensaver.PNG;screensaver.mp4" } } \ No newline at end of file diff --git a/cfgs/usct-product.json b/cfgs/usct-product.json index 88b7d88..0fd5c20 100644 --- a/cfgs/usct-product.json +++ b/cfgs/usct-product.json @@ -88,5 +88,8 @@ "worklistfilter": { "default": "Recent3Days", "lists": "Today;Recent3Days;ThisWeek;ThisMonth" + }, + "screensaver": { + "content": "screensaver.PNG;screensaver.mp4" } } \ No newline at end of file diff --git a/src/dialogs/DialogManager.cpp b/src/dialogs/DialogManager.cpp index e86397a..9eda6dd 100644 --- a/src/dialogs/DialogManager.cpp +++ b/src/dialogs/DialogManager.cpp @@ -23,8 +23,10 @@ #include "network/GetIPDialog.h" #include "network/GetRouteDialog.h" -#include "appvals/AppGlobalValues.h" #include "windows/LoginDialog.h" +#include "screensaver/ScreenSaverWindow.h" + +#include "appvals/AppGlobalValues.h" #include "json/jsonobject.h" #include "shimlib/ShimLib.h" @@ -36,6 +38,7 @@ namespace DialogManager::DialogManager() : QObject() , mFunctionDialog(nullptr) +, mScreenSaverWindow(nullptr) , mOperationMessageDialog(nullptr) , mSyncDialog(nullptr) , mTopWidget(nullptr) @@ -52,6 +55,7 @@ void DialogManager::init(QWidget* aParent) { connect(EventCenter::Default(), &EventCenter::InvokeOperationEnd,this,&DialogManager::invokeOperationEnd); MultyMessageDialogManager::getInstance()->setDialogParent(aParent); mTopWidget = aParent; + mScreenSaverWindow = new ScreenSaverWindow(); } //得考虑多线程的问题 @@ -84,12 +88,25 @@ void DialogManager::requestLogin(QWidget* aParent) if (!mFunctionDialog){ mFunctionDialog = new LoginDialog(aParent); } + setTopWidget(mFunctionDialog); mFunctionDialog->setWindowModality(Qt::WindowModal); mFunctionDialog->exec(); while (QDialog::Accepted != mFunctionDialog->result()) { mFunctionDialog->exec(); } + releaseTopWidget(mFunctionDialog); +} + +void DialogManager::requestScreenSaverPlay() +{ + setFocusToTopDialog(); + mScreenSaverWindow->play(); +} + +void DialogManager::requestScreenSaverStop(bool aIsStopLocker) +{ + mScreenSaverWindow->stop(aIsStopLocker); } int DialogManager::requestAddAccount(QSqlTableModel* model) { @@ -308,10 +325,12 @@ void DialogManager::raiseDeviceError(QObject *parent, QObject *msg) { dialog->showExitButton(); setTopWidget(dialog); dialog->setWindowModality(Qt::WindowModal); + mScreenSaverWindow->stop(true); dialog->showFullScreen (); dialog->exec(); releaseTopWidget(dialog); dialog->deleteLater(); + mScreenSaverWindow->startLocker(); } // 扫描过程 dialog 只能为最底层,并且会被error dialog 清除! @@ -408,6 +427,7 @@ void DialogManager::clearMessageDialog() { DialogManager::~DialogManager() { clearMessageDialog(); + delete mScreenSaverWindow; } void DialogManager::raiseMultyMessageDialog(const QString& aMessage, MessageLevel aMessageLevel) diff --git a/src/dialogs/DialogManager.h b/src/dialogs/DialogManager.h index 643e597..76b871c 100644 --- a/src/dialogs/DialogManager.h +++ b/src/dialogs/DialogManager.h @@ -16,6 +16,7 @@ class GUIMessageDialog; class QSqlTableModel; class PatientInformation; class LoginDialog; +class ScreenSaverWindow; enum MessageLevel:unsigned int; @@ -43,6 +44,8 @@ public: void init(QWidget* aParent); void requestLogin(QWidget* aParent); + void requestScreenSaverPlay(); + void requestScreenSaverStop(bool aIsStopLocker = false); int requestAddAccount(QSqlTableModel* model); int requestEditSelfAccount(); int requestEditAdminAccount(const QMap& values); @@ -78,6 +81,7 @@ private: private: LoginDialog* mFunctionDialog; + ScreenSaverWindow* mScreenSaverWindow; QPointer mOperationMessageDialog; QPointer mSyncDialog; QWidget* mTopWidget; diff --git a/src/event/EventCenter.h b/src/event/EventCenter.h index 7a8b016..6db34cb 100644 --- a/src/event/EventCenter.h +++ b/src/event/EventCenter.h @@ -31,7 +31,8 @@ ADD_EVENT_VALUE(GlobalBannerMessage)\ ADD_EVENT_VALUE(ReloadLanguage)\ ADD_EVENT_VALUE(WarnStateFlagChange)\ ADD_EVENT_VALUE(GUIErrorRaise)\ -ADD_EVENT_VALUE(DeviceInfoRaise) +ADD_EVENT_VALUE(DeviceInfoRaise)\ +ADD_EVENT_VALUE(RequestScreenSaver) enum GUIEvents { #define ADD_EVENT_VALUE(val) val, diff --git a/src/forms/settings/GeneralForm.cpp b/src/forms/settings/GeneralForm.cpp index 4ee4cd2..9d85fa2 100644 --- a/src/forms/settings/GeneralForm.cpp +++ b/src/forms/settings/GeneralForm.cpp @@ -16,6 +16,11 @@ #include "components/ULineEdit.h" #include "components/ListBox.h" +namespace +{ + const int MINIMUM_LOCKTIME = 30; +} + GeneralForm::GeneralForm(QWidget* aParent) : QWidget(aParent) , mLayout(new QVBoxLayout(this)) @@ -86,8 +91,12 @@ GeneralForm::GeneralForm(QWidget* aParent) connect(lockTime, &QLineEdit::textChanged, [=](const QString& str) { //take effect - JsonObject::Instance()->setLockScreenTimeout(str); - Locker::getInstance()->setTimer(JsonObject::Instance()->lockerCount()); + int time = str.toInt(); + if (MINIMUM_LOCKTIME < time) + { + JsonObject::Instance()->setLockScreenTimeout(str); + Locker::getInstance()->setTimer(str.toInt() * 1000); + } }); diff --git a/src/json/jsonobject.cpp b/src/json/jsonobject.cpp index 0509805..658e17c 100644 --- a/src/json/jsonobject.cpp +++ b/src/json/jsonobject.cpp @@ -539,4 +539,7 @@ void JsonObject::setCompleteNotify(bool val) { setBool("general","CompleteNotify", val, true); } - +QStringList JsonObject::getScreenSaverInfomation() +{ + return QString(getJsonString("screensaver", "content")).split(";"); +} diff --git a/src/json/jsonobject.h b/src/json/jsonobject.h index 18d149b..4bd66ce 100644 --- a/src/json/jsonobject.h +++ b/src/json/jsonobject.h @@ -107,6 +107,8 @@ public: QList getIpRouteList(); void setIpRouteList(const QList& list); + + QStringList getScreenSaverInfomation(); private: diff --git a/src/main.cpp b/src/main.cpp index b1faf30..54e7558 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -73,9 +73,11 @@ int main(int argc, char* argv[]) SQLHelper::Open(); MainWindow w; + DialogManager::Default()->init(&w); UserOperationLog::Default()->init(); //暂时为了调试关闭锁屏 + //Locker::getInstance()->setIsEnable(true); //Locker::getInstance()->start(); //QObject::connect(TouchScreenSignalSender::getInstance(), SIGNAL(touchScreen()), Locker::getInstance(), SLOT(refreshTimer())); QList gestures; @@ -107,7 +109,6 @@ int main(int argc, char* argv[]) w.requestLogin(); - DialogManager::Default()->init(&w); DeviceManager::Default()->initDevice(); ret = a.exec(); @@ -118,7 +119,7 @@ int main(int argc, char* argv[]) { w.showFullScreen(); w.requestLogin(); - DialogManager::Default()->init(&w); + DeviceManager::Default()->initDevice(); ret = a.exec(); } diff --git a/src/screensaver/ScreenSaverWindow.cpp b/src/screensaver/ScreenSaverWindow.cpp new file mode 100644 index 0000000..036ae3f --- /dev/null +++ b/src/screensaver/ScreenSaverWindow.cpp @@ -0,0 +1,146 @@ +#include "ScreenSaverWindow.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "json/jsonobject.h" +#include "utilities/Locker.h" + +namespace +{ + const QString SCREENSAVER_PATH = "./screensaver"; + const QStringList VEDIOSUFFIX_FILTER = QStringList() << "*.mp4" << "*.avi"; + const QStringList PHOTOSUFFIX_FILTER = QStringList() << "*.PNG" << "*.JPG"; + const int PHOTOPLAYED_TIME = 5000; +} + +ScreenSaverWindow::ScreenSaverWindow(QWidget *aParent) + : QWidget(aParent) + , mMediaPlayer(new QMediaPlayer(this)) + , mVideoWidget(new QVideoWidget(this)) + , mMultiMediaList() + , mPhotoWidget(new QLabel(this)) + , mPhotoTimer(new QTimer(this)) + , mCurrentPlayIndex(0) + , mIsPlaying(false) +{ + setGeometry(QApplication::desktop()->screenGeometry()); + //this code must be first + mMediaPlayer->setVideoOutput(mVideoWidget); + + initializeMultimediaList(); + setWindowFlags( Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint | Qt::Tool | Qt::BypassWindowManagerHint); + QVBoxLayout* layout = new QVBoxLayout(this); + layout->addWidget(mVideoWidget); + layout->addWidget(mPhotoWidget); + mPhotoWidget->setScaledContents(true); + mPhotoWidget->hide(); + mVideoWidget->hide(); + mPhotoTimer->setSingleShot(true); + connect(mPhotoTimer, &QTimer::timeout, this, &ScreenSaverWindow::playMultimedia); + connect(mMediaPlayer, &QMediaPlayer::mediaStatusChanged, this, &ScreenSaverWindow::handleVideoStatusChanged); +} + +void ScreenSaverWindow::initializeMultimediaList() +{ + QDir screenSaverDir(SCREENSAVER_PATH); + QStringList videoFileList = screenSaverDir.entryList(VEDIOSUFFIX_FILTER); + QStringList photoFileList = screenSaverDir.entryList(PHOTOSUFFIX_FILTER); + + foreach(QString multimediaInfo, JsonObject::Instance()->getScreenSaverInfomation()) + { + if (videoFileList.contains(multimediaInfo)) + { + mMultiMediaList << MultiMediaData(screenSaverDir.absoluteFilePath(multimediaInfo),MultiMediaType::Video); + } + else if (photoFileList.contains(multimediaInfo)) + { + mMultiMediaList << MultiMediaData(screenSaverDir.absoluteFilePath(multimediaInfo),MultiMediaType::Photo); + } + } +} + +void ScreenSaverWindow::mousePressEvent(QMouseEvent* aEvent) +{ + stop(); + QWidget::mousePressEvent(aEvent); +} + +void ScreenSaverWindow::play() +{ + if (mIsPlaying || mMultiMediaList.count() == 0) + { + return; + } + mIsPlaying = true; + show(); + playMultimedia(); +} + +void ScreenSaverWindow::playMultimedia() +{ + if (mMultiMediaList.count() <= mCurrentPlayIndex) + { + mCurrentPlayIndex = 0; + } + MultiMediaData data = mMultiMediaList.at(mCurrentPlayIndex); + if (MultiMediaType::Video == data.MediaType) + { + mPhotoWidget->hide(); + mVideoWidget->show(); + mMediaPlayer->setMedia(QUrl::fromLocalFile(data.MediaPath)); + mMediaPlayer->play(); + } + else if ( MultiMediaType::Photo == data.MediaType) + { + mVideoWidget->hide(); + mPhotoWidget->show(); + mPhotoWidget->setPixmap(data.MediaPath); + mPhotoTimer->start(PHOTOPLAYED_TIME); + } + mCurrentPlayIndex++; +} + +void ScreenSaverWindow::stop(bool aIsStopLocker) +{ + if (aIsStopLocker) + { + Locker::getInstance()->stop(); + } + else + { + Locker::getInstance()->start(); + } + if (!mIsPlaying) + { + return; + } + mIsPlaying = false; + mPhotoTimer->stop(); + mPhotoWidget->hide(); + mVideoWidget->hide(); + mCurrentPlayIndex = 0; + hide(); + mMediaPlayer->stop(); +} + +void ScreenSaverWindow::handleVideoStatusChanged(QMediaPlayer::MediaStatus aStatus) +{ + if (QMediaPlayer::EndOfMedia == aStatus) + { + playMultimedia(); + } +} + +void ScreenSaverWindow::startLocker() +{ + Locker::getInstance()->start(); +} diff --git a/src/screensaver/ScreenSaverWindow.h b/src/screensaver/ScreenSaverWindow.h new file mode 100644 index 0000000..842c9b5 --- /dev/null +++ b/src/screensaver/ScreenSaverWindow.h @@ -0,0 +1,54 @@ +#ifndef SCREENSAVERWINDOW_H +#define SCREENSAVERWINDOW_H + +#include +#include + +class QMediaPlayer; +class QVideoWidget; +class QLabel; + +class ScreenSaverWindow : public QWidget +{ + Q_OBJECT + enum MultiMediaType + { + Video,Photo + }; + + struct MultiMediaData + { + MultiMediaData(const QString& aMediaPath, MultiMediaType aMediaType) + { + MediaPath = aMediaPath; + MediaType = aMediaType; + }; + QString MediaPath; + MultiMediaType MediaType; + }; + +public: + explicit ScreenSaverWindow(QWidget *aParent = nullptr); + void play(); + void stop(bool aIsStopLocker = false); + void startLocker(); + +protected: + void mousePressEvent(QMouseEvent* aEvent); + +private: + void initializeMultimediaList(); + void handleVideoStatusChanged(QMediaPlayer::MediaStatus aStatus); + void playMultimedia(); + +private: + QMediaPlayer* mMediaPlayer; + QVideoWidget* mVideoWidget; + QList mMultiMediaList; + QLabel* mPhotoWidget; + QTimer* mPhotoTimer; + int mCurrentPlayIndex; + bool mIsPlaying; +}; + +#endif // SCREENSAVERWINDOW_H diff --git a/src/utilities/Locker.cpp b/src/utilities/Locker.cpp index 5ecc990..993b0e8 100644 --- a/src/utilities/Locker.cpp +++ b/src/utilities/Locker.cpp @@ -15,6 +15,7 @@ Locker::Locker() : QObject() , mScreenTimer(new QTimer(this)) , mCounter(JsonObject::Instance()->lockerCount()) + , mIsEnable(false) { connect(mScreenTimer, SIGNAL(timeout()), this, SLOT(coverScreen())); } @@ -25,7 +26,19 @@ Locker::~Locker() void Locker::start() { - mScreenTimer->start(mCounter); + if (mIsEnable) + { + mScreenTimer->start(mCounter); + } +} + +void Locker::setIsEnable(bool aIsEnable) +{ + mIsEnable = aIsEnable; + if (!mIsEnable) + { + mScreenTimer->stop(); + } } void Locker::coverScreen() @@ -37,7 +50,8 @@ void Locker::coverScreen() else { mScreenTimer->stop(); - EventCenter::Default()->triggerEvent(GUIEvents::RequestLogin, nullptr, nullptr); + //EventCenter::Default()->triggerEvent(GUIEvents::RequestLogin, nullptr, nullptr); + EventCenter::Default()->triggerEvent(GUIEvents::RequestScreenSaver, nullptr, nullptr); } } void Locker::setTimer(int aInterval) @@ -51,3 +65,8 @@ void Locker::refreshTimer() mScreenTimer->stop(); mScreenTimer->start(mCounter); } + +void Locker::stop() +{ + mScreenTimer->stop(); +} diff --git a/src/utilities/Locker.h b/src/utilities/Locker.h index 863f1e6..16c9635 100644 --- a/src/utilities/Locker.h +++ b/src/utilities/Locker.h @@ -10,7 +10,9 @@ class Locker : public QObject public: static Locker* getInstance(); void start(); + void stop(); void setTimer(int aInterval); + void setIsEnable(bool aIsEnable); public slots: void refreshTimer(); @@ -21,6 +23,7 @@ private: QTimer* mScreenTimer; int mCounter; + bool mIsEnable; }; #endif // LOCKER_H diff --git a/src/windows/MainWindow.cpp b/src/windows/MainWindow.cpp index 45b9c3b..9d0fe70 100644 --- a/src/windows/MainWindow.cpp +++ b/src/windows/MainWindow.cpp @@ -29,7 +29,6 @@ MainWindow::MainWindow(QWidget* aParent) , mDebugMessageConsole(nullptr) , mTabWidget(new QTabWidget(this)) , mAdminTabIndex(-1) - , mLoginDialog(new LoginDialog(this)) , mThread(nullptr) , mIsDebugMode(false) { @@ -45,6 +44,7 @@ MainWindow::MainWindow(QWidget* aParent) connect(DeviceManager::Default(), &DeviceManager::raiseGlobalError, this, &MainWindow::triggerError); connect(DeviceManager::Default(), &DeviceManager::raiseGlobalInfo, this, &MainWindow::triggerInfo); connect(EventCenter::Default(), &EventCenter::ReloadLanguage, this, &MainWindow::reloadLanguage); + connect(EventCenter::Default(), &EventCenter::RequestScreenSaver, this, &MainWindow::requestScreenSaver); GUIErrorHandle::Default()->init(); mThread = QThread::create([]() { QThread::sleep(10); @@ -276,6 +276,11 @@ void MainWindow::requestLogin() QApplication::setActiveWindow(centralWidget()); } +void MainWindow::requestScreenSaver() +{ + DialogManager::Default()->requestScreenSaverPlay(); +} + void MainWindow::resetRoleLayout() { if (User::Current()->isAdmin()) { diff --git a/src/windows/MainWindow.h b/src/windows/MainWindow.h index b679718..e1ed046 100644 --- a/src/windows/MainWindow.h +++ b/src/windows/MainWindow.h @@ -18,7 +18,6 @@ class QGestureEvent; class QSwipeGesture; class QPanGesture; class QDockWidget; -class LoginDialog; class MainWindow : public QMainWindow { @@ -31,6 +30,7 @@ public: void centerWidgetHide(); void centerWidgetShow(); void requestLogin(); + void requestScreenSaver(); QTextEdit* getEdit(); void debugConsoleOn(); void grabGestures(const QList& aGestures); @@ -59,7 +59,6 @@ private: QTextEdit* mDebugMessageConsole; QTabWidget* mTabWidget; int mAdminTabIndex; - LoginDialog* mLoginDialog; QThread* mThread; bool mIsDebugMode;