這個效果的靈感來自於大屏電子看板系統,在不少系統中尤爲是上了大屏的時候,其實在用戶不在操做的時候,是很不但願看到那個鼠標箭頭指針的,只有當用戶操做的時候才顯示出來,這個就須要開個定時器定時計算最後一次用戶操做的時間,和當前時間比較,若是超過了鼠標未操做隱藏時間,則隱藏鼠標,在Qt中提供了方法qApp->setOverrideCursor(Qt::BlankCursor);這樣設置個空白的鼠標指針就表示隱藏鼠標,若是須要恢復調用qApp->restoreOverrideCursor();便可,怎麼觸發恢復鼠標指針呢?搞個bool存儲當前鼠標是否隱藏,在鼠標隱藏的時候置爲真,攔截鼠標移動事件,一旦發現以前鼠標處於隱藏狀態,則當即恢復指針狀態,同時將標誌位改成假,否則頻繁恢復指針沒有意義,只有當指針隱藏的時候才須要恢復一次。linux
體驗地址:https://pan.baidu.com/s/1bbL2ZughZAgfIGrexyN-9g 提取碼:zkeh 。數據庫
監控系統是由攝像、傳輸、控制、顯示、記錄登記5大部分組成。攝像機經過同軸視頻電纜將視頻圖像傳輸到控制主機,控制主機再將視頻信號分配到各監視器及錄像設備,同時可將須要傳輸的語音信號同步錄入到錄像機內。 經過控制主機,操做人員可發出指令,對雲臺的上、下、左、右的動做進行控制及對鏡頭進行調焦變倍的操做,並可經過控制主機實如今多路攝像機及雲臺之間的切換。利用特殊的錄像處理模式,可對圖像進行錄入、回放、處理等操做,使錄像效果達到最佳。安全
視頻監控系統由實時控制系統、監視系統及管理信息系統組成。實時控制系統完成實時數據採集處理、存儲、反饋的功能;監視系統完成對各個監控點的全天候的監視,能在多操做控制點上切換多路圖像;管理信息系統完成各種所需信息的採集、接收、傳輸、加工、處理,是整個系統的控制核心。視頻監控系統是安全防範系統的組成部分,它是一種防範能力較強的綜合系統。視頻監控以其直觀、方便、信息內容豐富而普遍應用於許多場合。app
#include "appinit.h" #include "quiwidget.h" #include "dbhelper.h" QScopedPointer<AppInit> AppInit::self; AppInit *AppInit::Instance() { if (self.isNull()) { static QMutex mutex; QMutexLocker locker(&mutex); if (self.isNull()) { self.reset(new AppInit); } } return self.data(); } AppInit::AppInit(QObject *parent) : QObject(parent) { } bool AppInit::eventFilter(QObject *watched, QEvent *event) { //負責將密碼字符串存入隊列 if (event->type() == QEvent::KeyPress) { QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event); int keyValue = keyEvent->key(); if (keyValue == Qt::Key_Escape) { emit keyPressed("esc"); return true; } else if (keyEvent->modifiers() & Qt::AltModifier) { if (keyValue == Qt::Key_Enter || keyValue == Qt::Key_Return) { emit keyPressed("alt+enter"); return true; } } } if (event->type() == QEvent::MouseMove) { //記住最後鼠標移動的時間,超過必定值則隱藏光標,一旦動了則顯示光標 lastTime = QDateTime::currentDateTime(); if (cursorHide) { cursorHide = false; qApp->restoreOverrideCursor(); } } //如下代碼處理無邊框窗體可拖動 QWidget *w = (QWidget *)watched; if (!w->property("canMove").toBool()) { return QObject::eventFilter(watched, event); } static QPoint mousePoint; static bool mousePressed = false; QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event); if (event->type() == QEvent::MouseButtonPress) { if (mouseEvent->button() == Qt::LeftButton) { mousePressed = true; mousePoint = mouseEvent->globalPos() - w->pos(); return true; } } else if (event->type() == QEvent::MouseButtonRelease) { mousePressed = false; return true; } else if (event->type() == QEvent::MouseMove) { if (mousePressed && (mouseEvent->buttons() && Qt::LeftButton)) { w->move(mouseEvent->globalPos() - mousePoint); return true; } } return QObject::eventFilter(watched, event); } void AppInit::checkCursor() { //超過規定時間鼠標未動則隱藏光標 if (!cursorHide) { QDateTime now = QDateTime::currentDateTime(); if (lastTime.secsTo(now) > App::CursorHideTime) { cursorHide = true; qApp->setOverrideCursor(Qt::BlankCursor); } } } void AppInit::start() { qApp->installEventFilter(this); //設置左側+最大化+最小化+關閉 圖標 QUIConfig::IconMain = 0xf108; QUIConfig::IconMax = 0xf2d2; QUIConfig::IconNormal = 0xf2d0; //設置全局字體 QUIConfig::FontSize = 12; QFont font; font.setFamily(QUIConfig::FontName); font.setPixelSize(QUIConfig::FontSize); qApp->setFont(font); //設置編碼 QUIHelper::setCode(); //設置翻譯文件 QUIHelper::setTranslator(); QUIHelper::setTranslator(":/image/widgets.qm"); //初始化隨機數種子 QUIHelper::initRand(); //生成文件夾 QUIHelper::newDir("config"); QUIHelper::newDir("snap"); QUIHelper::newDir("db"); //載入配置文件 App::ConfigFile = QString("%1/config/%2.ini").arg(QUIHelper::appPath()).arg("video_system"); App::readConfig(); DBData::NvrTypes << "海康" << "大華" << "宇視" << "深廣" << "其餘"; DBData::IpcTypes << "海康" << "大華" << "宇視" << "泰傑" << "其餘"; //判斷數據庫文件是否存在,不存在則從資源文件複製出來 QString dbName = QString("%1/db/%2.db").arg(QUIHelper::appPath()).arg("video_system"); QFile dbFile(dbName); if (!dbFile.exists() || dbFile.size() == 0) { QUIHelper::showMessageBoxError("數據庫文件不存在!"); } //程序啓動後打開數據庫鏈接,在任何窗體須要的地方調用數據庫 QSqlDatabase dbConn; dbConn = QSqlDatabase::addDatabase("QSQLITE"); dbConn.setDatabaseName(dbName); dbConn.open(); //載入默認數據 DBHelper::loadUserInfo(); DBHelper::loadNvrInfo(); DBHelper::loadIpcInfo(); //啓動定時器計算多久用戶沒有操做過鼠標 cursorHide = false; lastTime = QDateTime::currentDateTime(); QTimer *timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(checkCursor())); timer->start(1000); }