亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

概述

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

效果

主窗口超時(shí)顯示鎖屏窗口:

在這里插入圖片描述

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

在這里插入圖片描述

在這里插入圖片描述

實(shí)現(xiàn)思路

  • 首先開啟一個(gè)線程用于QTimer定時(shí)器計(jì)時(shí),最開始進(jìn)入軟件開啟定時(shí)器計(jì)時(shí),超時(shí)則顯示鎖屏窗口;而手觸摸屏幕會(huì)觸發(fā)鼠標(biāo)點(diǎn)擊事件,則停止計(jì)時(shí);而手離開屏幕會(huì)觸發(fā)鼠標(biāo)釋放事件,則重新開始計(jì)時(shí)。
  • 因?yàn)槭嵌啻翱诘膽?yīng)用軟件,所以需要監(jiān)控全局鼠標(biāo)事件,所以需要子類化QApplication類。

核心代碼

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

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í)鎖屏槽函數(shù)

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

    QTimer *m_pTimer; //定時(shí)器
    QThread *m_pThread; //定時(shí)器線程
};

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

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

#include "globalapplication.h"

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

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

    //初始化定時(shí)器線程和定時(shí)器
    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()));
    //開啟線程,調(diào)用定時(shí)器的start()
    m_pThread->start();

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

GlobalApplication::~GlobalApplication()
{
    //徹底結(jié)束線程(單獨(dú)的一個(gè)quit()無法徹底結(jié)束進(jìn)程)
    m_pThread->requestInterruption();
    m_pThread->quit();
    m_pThread->wait();
}

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

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

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

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

        //這行代碼要放在最后,因?yàn)樵跇?gòu)建對象時(shí),會(huì)自動(dòng)設(shè)置m_unlockFlag,所以在構(gòu)建后要復(fù)位m_unlockFlag
        m_myLockWindow->m_unlockFlag = false;
    }
    else
    {
        qDebug()<<"重復(fù)鎖屏";
    }
}

測試函數(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();

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

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

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

     w.show();

    return a.exec();
}

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

相關(guān)文章

  • C++文件上傳、下載工具

    C++文件上傳、下載工具

    這篇文章主要為大家詳細(xì)介紹了C++文件上傳、下載工具的相關(guān)資料,感興趣的小伙伴們可以參考一下
    2016-05-05
  • 基于C++字符串替換函數(shù)的使用詳解

    基于C++字符串替換函數(shù)的使用詳解

    本篇文章是對C++字符串替換函數(shù)的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 詳解C語言中free()函數(shù)與getpagesize()函數(shù)的使用

    詳解C語言中free()函數(shù)與getpagesize()函數(shù)的使用

    這篇文章主要介紹了詳解C語言中free()函數(shù)與getpagesize()函數(shù)的使用,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-08-08
  • C語言中結(jié)構(gòu)體和共用體實(shí)例教程

    C語言中結(jié)構(gòu)體和共用體實(shí)例教程

    這篇文章主要給大家介紹了關(guān)于C語言中結(jié)構(gòu)體和共用體的相關(guān)資料,結(jié)構(gòu)體是一種自定義的復(fù)合數(shù)據(jù)類型,共用體也叫聯(lián)合體,使幾個(gè)不同類型的變量共占一段內(nèi)存(相互覆蓋),需要的朋友可以參考下
    2021-06-06
  • C語言 詳細(xì)分析結(jié)構(gòu)體的內(nèi)存對齊

    C語言 詳細(xì)分析結(jié)構(gòu)體的內(nèi)存對齊

    C 數(shù)組允許定義可存儲(chǔ)相同類型數(shù)據(jù)項(xiàng)的變量,結(jié)構(gòu)是 C 編程中另一種用戶自定義的可用的數(shù)據(jù)類型,它允許你存儲(chǔ)不同類型的數(shù)據(jù)項(xiàng),本篇讓我們來了解C 的結(jié)構(gòu)體內(nèi)存對齊
    2022-03-03
  • C++ 數(shù)據(jù)結(jié)構(gòu)之水洼的數(shù)量算法

    C++ 數(shù)據(jù)結(jié)構(gòu)之水洼的數(shù)量算法

    這篇文章主要介紹了C++ 數(shù)據(jù)結(jié)構(gòu)之水洼的數(shù)量算法的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • C語言的入口函數(shù)的實(shí)現(xiàn)

    C語言的入口函數(shù)的實(shí)現(xiàn)

    在C語言的世界里,所有的程序都是用函數(shù)來裝配的,main稱之為主函數(shù),是所有程序運(yùn)行的入口,本文主要介紹了C語言的入口函數(shù),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • C 語言基礎(chǔ)教程(我的C之旅開始了)[七]

    C 語言基礎(chǔ)教程(我的C之旅開始了)[七]

    C 語言基礎(chǔ)教程(我的C之旅開始了)[七]...
    2007-02-02
  • Qt學(xué)習(xí)教程之對話框消失動(dòng)畫效果

    Qt學(xué)習(xí)教程之對話框消失動(dòng)畫效果

    這篇文章主要給大家介紹了關(guān)于Qt學(xué)習(xí)教程之對話框消失動(dòng)畫效果的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • 完美解決QT?QGraphicsView提升到QChartView報(bào)錯(cuò)的問題

    完美解決QT?QGraphicsView提升到QChartView報(bào)錯(cuò)的問題

    使用QT提供的QChartView來繪制圖表,提升QGraphicsView控件繼承QChartView后,然后將QGraphicsView提升到我們自己寫的類,怎么才能確保提升后編譯不報(bào)錯(cuò)呢,下面小編給大家?guī)砹薗T QGraphicsView 提升到QChartView報(bào)錯(cuò)解決方案,感興趣的朋友一起看看吧
    2023-05-05

最新評論