最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt超時鎖屏的實現(xiàn)示例

 更新時間:2022年01月14日 09:58:14   作者:C君莫笑  
本文主要介紹了Qt超時鎖屏的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

概述

Qt實現(xiàn)超時鎖屏的功能(工控機觸摸屏),當手長時間不觸摸屏幕的時候,程序超時會顯示鎖屏窗口。

效果

主窗口超時顯示鎖屏窗口:

在這里插入圖片描述

系統(tǒng)窗口超時顯示鎖屏窗口:

在這里插入圖片描述

在這里插入圖片描述

實現(xiàn)思路

  • 首先開啟一個線程用于QTimer定時器計時,最開始進入軟件開啟定時器計時,超時則顯示鎖屏窗口;而手觸摸屏幕會觸發(fā)鼠標點擊事件,則停止計時;而手離開屏幕會觸發(fā)鼠標釋放事件,則重新開始計時。
  • 因為是多窗口的應用軟件,所以需要監(jiān)控全局鼠標事件,所以需要子類化QApplication類。

核心代碼

監(jiān)控全局鼠標事件的類為GlobalApplication,其中也實現(xiàn)了開啟一個線程進行定時器計時,以及超時顯示鎖屏窗口的功能。

globalapplication.h 文件的內(nèi)容如下:

class GlobalApplication : public QApplication
{
    Q_OBJECT

public:
     GlobalApplication(int&argc,char **argv);
     ~GlobalApplication();

     bool notify(QObject*, QEvent *);

private slots:
    void onTimeOut(); //超時鎖屏槽函數(shù)

private:
    myLockWindow *m_myLockWindow; //鎖屏窗口
    QObject *m_currWinObj; //鼠標事件發(fā)生時的當前所在窗口

    QTimer *m_pTimer; //定時器
    QThread *m_pThread; //定時器線程
};

注:Widget_Lock 為鎖屏窗口類,可以替換成你自己要顯示的窗口。

globalapplication.cpp 文件的內(nèi)容如下:

#include "globalapplication.h"

GlobalApplication::GlobalApplication(int &argc,char **argv):
QApplication(argc,argv)
{

    m_currWinObj = new QObject(); //初始化鼠標事件發(fā)生時的當前所在窗口

    //初始化定時器線程和定時器
    m_pThread = new QThread(this);
    m_pTimer = new QTimer();
    m_pTimer->moveToThread(m_pThread);
    m_pTimer->setInterval(4000);
    connect(m_pThread, SIGNAL(started()), m_pTimer, SLOT(start()));
    connect(m_pTimer, SIGNAL(timeout()),this,SLOT(onTimeOut()));
    //開啟線程,調用定時器的start()
    m_pThread->start();

    m_myLockWindow = new myLockWindow(); //初始化鎖屏窗口
    m_myLockWindow->m_unlockFlag = true; //初始化解除鎖屏成功標志
}

GlobalApplication::~GlobalApplication()
{
    //徹底結束線程(單獨的一個quit()無法徹底結束進程)
    m_pThread->requestInterruption();
    m_pThread->quit();
    m_pThread->wait();
}

bool GlobalApplication::notify(QObject *obj, QEvent *e)
{
    //因為鼠標點擊或滑動到任何窗口部件都會進入該函數(shù),所以根據(jù)objectName()過濾窗口部件
    if(obj->objectName().right(1) == "W") //cleanW mainW
    {
        //工控機是觸摸屏,觸摸屏幕和滑動屏幕都會點擊屏幕,所以這里只檢測鼠標點擊事件
        if(e->type() == QEvent::MouseButtonPress) //不區(qū)分左右鍵按下了
        {
            //qDebug() << "objName:" << obj->objectName();
            //qDebug()<<"press stop";
            m_pThread->quit(); //線程結束后,則在此線程的定時器會自動停止計時
        }
        else if(e->type() == QEvent::MouseButtonRelease)
        {
            //qDebug()<<"release start";
            m_pThread->start(); //線程開始,會發(fā)送started()信號,啟動定時器的start()槽函數(shù)
        }

        m_currWinObj = obj; //獲得鼠標事件發(fā)生時的當前所在窗口
    }

    return QApplication::notify(obj,e);
}

//超時鎖屏槽函數(shù)
void GlobalApplication::onTimeOut()
{
    //m_unlockFlag為false,表示鎖屏窗口未關閉,則即使再超時也不會再顯示鎖屏窗口
    if(m_myLockWindow->m_unlockFlag == true) //當密碼輸入正確后,關閉鎖屏窗口,則會將m_unlockFlag設置為true
    {
        qDebug()<<"鎖屏";
        //創(chuàng)建鎖屏窗口對象,并顯示該窗口
        m_myLockWindow = new myLockWindow();
        m_myLockWindow->show();
        qDebug()<<"創(chuàng)建鎖屏窗口對象,并顯示該窗口";

        //這行代碼要放在最后,因為在構建對象時,會自動設置m_unlockFlag,所以在構建后要復位m_unlockFlag
        m_myLockWindow->m_unlockFlag = false;
    }
    else
    {
        qDebug()<<"重復鎖屏";
    }
}

測試函數(shù)

int main(int argc, char *argv[])
{
    GlobalApplication a(argc, argv);

    QDesktopWidget *desktopWidget = QApplication::desktop();
    QRect screenRect = desktopWidget->screenGeometry();
    qDebug()<<screenRect.width();
    qDebug()<<screenRect.height();

    //獲取計算機名稱
    QString localHostName = QHostInfo::localHostName();
    qDebug() << "計算機名:" << localHostName;

    QPixmap pixmap(":/HeadImage.png"); // 裝載圖片
    QSplashScreen splash(pixmap); // 初始化圖片到QSplashScreen
    splash.show(); // 顯示圖片
    a.processEvents(); // 刷新事件循環(huán)

    Widget w;
    splash.finish(&w); // 完成后自動close

     w.show();

    return a.exec();
}

到此這篇關于Qt超時鎖屏的實現(xiàn)示例的文章就介紹到這了,更多相關Qt超時鎖屏內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C語言數(shù)據(jù)結構與算法之排序總結(二)

    C語言數(shù)據(jù)結構與算法之排序總結(二)

    這篇文章住要介紹的是選擇類排序中的簡單、樹形和堆排序,歸并排序、分配類排序的基數(shù)排序,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2021-12-12
  • C++實現(xiàn)基于reactor的百萬級并發(fā)服務器

    C++實現(xiàn)基于reactor的百萬級并發(fā)服務器

    本文介紹了基于Reactor模式的百萬級并發(fā)服務器,使用epoll進行高效I/O多路復用,支持多個端口的監(jiān)聽,并通過回調機制處理每個連接的接收和發(fā)送操作,需要的朋友可以參考下
    2025-02-02
  • C語言二叉樹的遍歷示例介紹

    C語言二叉樹的遍歷示例介紹

    大家好,本篇文章主要講的是C語言二叉樹的遍歷示例介紹,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • C++中的STL常用算法之遍歷算法詳解

    C++中的STL常用算法之遍歷算法詳解

    這篇文章主要介紹了C++中的STL常用算法之遍歷算法詳解,ransform() 可以將函數(shù)應用到容器的元素上,并將這個函數(shù)返回的值保存到另一個容器中,它返回的迭代器指向輸出容器所保存的最后一個元素的下一個位置,需要的朋友可以參考下
    2023-12-12
  • C語言實現(xiàn)學生成績管理系統(tǒng)項目

    C語言實現(xiàn)學生成績管理系統(tǒng)項目

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)學生成績管理系統(tǒng)項目,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C++實現(xiàn)正整數(shù)的四則運算表達式

    C++實現(xiàn)正整數(shù)的四則運算表達式

    這篇文章主要為大家詳細介紹了C++實現(xiàn)正整數(shù)的四則運算表達式,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • opencv 做人臉識別 opencv 人臉匹配分析

    opencv 做人臉識別 opencv 人臉匹配分析

    opencv 人臉識別通過級聯(lián)分類器對特征的分級篩選來確定是否是人臉,每個節(jié)點的正確識別率很高,但正確拒絕率很低,任一節(jié)點判斷沒有人臉特征則結束運算,宣布不是人臉
    2012-11-11
  • C++實現(xiàn)獲取指定代碼段的cpu占用

    C++實現(xiàn)獲取指定代碼段的cpu占用

    這篇文章主要為大家詳細介紹了C++實現(xiàn)獲取指定代碼段的cpu占用的相關知識,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考一下
    2023-12-12
  • C語言設計實現(xiàn)掃描器的自動機的示例詳解

    C語言設計實現(xiàn)掃描器的自動機的示例詳解

    這篇文章主要為大家詳細介紹了如何利用C語言設計實現(xiàn)掃描器的自動機,可識別的單詞包括:關鍵字、界符、標識符和常整型數(shù),感興趣的小伙伴可以了解一下
    2022-12-12
  • c++?創(chuàng)建型設計模式工廠方法Factory?Method示例詳解

    c++?創(chuàng)建型設計模式工廠方法Factory?Method示例詳解

    這篇文章主要為大家介紹了c++?創(chuàng)建型設計模式工廠方法Factory?Method示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09

最新評論

荣昌县| 共和县| 舒城县| 刚察县| 门头沟区| 横山县| 会泽县| 康平县| 法库县| 中山市| 雷州市| 芦溪县| 旌德县| 苏尼特右旗| 江北区| 梁山县| 什邡市| 获嘉县| 襄樊市| 东宁县| 太仆寺旗| 轮台县| 汝城县| 玉环县| 西乌| 海安县| 略阳县| 南靖县| 红桥区| 万山特区| 陇川县| 赣州市| 班玛县| 崇明县| 衡山县| 合作市| 荥经县| 布尔津县| 沈丘县| 迭部县| 高雄市|