日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

QT关于屏幕保护程序

發布時間:2023/12/18 c/c++ 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QT关于屏幕保护程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先,要寫一個屏保程序,需要一個定時器來統計多長時間沒有處理事件進入休眠,

第二,事件處理是一個全局性的,過濾處理事件,

//直接上源碼吧,自己改改。重寫Application #ifndef GLOBALAPPLICATION_H #define GLOBALAPPLICATION_H #include <QApplication> #include <QTimer> #include <QWidget> #include <QSplashScreen> class GlobalApplicationPri : public QWidget { Q_OBJECT Q_PROPERTY(bool mState READ state WRITE setState NOTIFY stateChanged) public: explicit GlobalApplicationPri(QWidget *parent = 0); ~GlobalApplicationPri(); void setWindowInstance(QWidget*wnd,QSplashScreen *); bool state(); void setState(bool);//周圍狀態 public slots: void mAcceptGlobalEvent(); void mAcceptActivationEvent(); signals: void stateChanged(); private: QWidget *mwidget; QTimer *mtime; QSplashScreen *msplash; bool mState; }; class GlobalApplication : public QApplication{ public: GlobalApplication(int &argc,char **argv,QWidget *parent = 0); ~GlobalApplication(); bool notify(QObject*, QEvent *); void setWindowInstance(QWidget*wnd,QSplashScreen *); private: GlobalApplicationPri *m_obj; QWidget *mwidget; QSplashScreen *msplash; }; #endif // GLOBALAPPLICATION_H

下面是.cpp文件

#include "globalapplication.h" #include <QKeyEvent> #include <QDebug> GlobalApplication::GlobalApplication(int &argc,char **argv,QWidget *parent):QApplication(argc,argv) {m_obj = new GlobalApplicationPri();}GlobalApplication::~GlobalApplication() {delete m_obj; }bool GlobalApplication::notify(QObject *obj, QEvent *e) {const QMetaObject* objMeta = obj->metaObject();QString clName = objMeta->className();if(e->type() == QEvent::KeyPress){QKeyEvent *keyEvent = static_cast<QKeyEvent *>(e);if(keyEvent->key() == Qt::Key_F1){qDebug()<< clName;qDebug() << "F1";}}else if(e->type() == QEvent::MouseButtonPress){QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(e);if(mouseEvent->buttons() == Qt::LeftButton){qDebug() << "left";m_obj->setState(true);}if(mouseEvent->buttons() == Qt::RightButton){qDebug() << "Right";}}return QApplication::notify(obj,e); }void GlobalApplication::setWindowInstance(QWidget *wnd,QSplashScreen *splash) {mwidget = wnd;msplash = splash;m_obj->setWindowInstance(wnd,splash); }GlobalApplicationPri::GlobalApplicationPri(QWidget *parent) {mwidget = Q_NULLPTR;mtime = Q_NULLPTR;msplash = Q_NULLPTR;mtime = new QTimer(this);connect(mtime, SIGNAL(timeout()),this, SLOT(mAcceptGlobalEvent()));mtime->start(20000);connect(this, SIGNAL(stateChanged()),this, SLOT(mAcceptActivationEvent())); }GlobalApplicationPri::~GlobalApplicationPri() {}void GlobalApplicationPri::setWindowInstance(QWidget *wnd, QSplashScreen *splash) {mwidget = wnd;msplash = splash; }bool GlobalApplicationPri::state() {return mState; }void GlobalApplicationPri::setState(bool mcont) {mState = mcont;emit stateChanged(); }void GlobalApplicationPri::mAcceptGlobalEvent() {mwidget->hide();msplash->show(); }void GlobalApplicationPri::mAcceptActivationEvent() {mtime->stop();msplash->hide();mwidget->show();mtime->start(20000); }

最后來看看主函數

#include "mainwindow.h" #include <QApplication>using namespace LENSOMETER;#include <QObject> #include <QApplication> #include <QFontDatabase> #include <QSplashScreen> #include "../../common/global/globalapplication.h" #include "mainwindow.h" #include <QThread>int main(int argc, char *argv[]) {GlobalApplication app(argc, argv);// // /// \brief splash // ///MainWindow mainWin;QSplashScreen *splash = new QSplashScreen;app.setWindowInstance(&mainWin,splash);splash->setPixmap(QPixmap(":/ui_image/load.png"));splash->show();//顯示圖片Qt::Alignment topRight = Qt::AlignRight | Qt::AlignTop;splash->showMessage(QObject::tr("Setting up the main window..."),topRight, Qt::white);splash->showMessage(QObject::tr("Loading modules..."),topRight, Qt::white);splash->showMessage(QObject::tr("Establishing connections..."),topRight, Qt::white);QThread::sleep(1);mainWin.show();splash->finish(&mainWin);return app.exec(); }

總結

以上是生活随笔為你收集整理的QT关于屏幕保护程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。