0
点赞
收藏
分享

微信扫一扫

QT关于屏幕保护程序


注:通过继承QApplication,获取全局事件处理权利

,还有一种简单的方法就是new一个widget出来遮住mainwindow

main文件

GlobalApplicationPri 获取事件状态

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


MainWindow mainWin;
QSplashScreen *splash = new QSplashScreen;
app.setWindowInstance(&mainWin,splash);
splash->setPixmap(QPixmap(":/style/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();
}

GlobalApplication.h文件

#ifndef GLOBALAPPLICATION_H
#define GLOBALAPPLICATION_H
#include <QApplication>
#include <QTimer>
#include <QWidget>
#include <QSplashScreen>
#include <QSettings>
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;
int sleeptime;
};


class GlobalApplication : public QApplication{
Q_OBJECT
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

GlobalApplication.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)
{
}
// mwidget->keyPress(keyEvent);
}
else if (e->type() == QEvent::MouseButtonPress)
{
QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(e);
if (mouseEvent->buttons() == Qt::LeftButton){
m_obj->setState(true);
}
if (mouseEvent->buttons() == Qt::RightButton){

}
}

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;
sleeptime = 500000;
mtime = new QTimer(this);
connect(mtime, SIGNAL(timeout()),this, SLOT(mAcceptGlobalEvent()));
mtime->start(sleeptime);
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();
mState = false;
}



void GlobalApplicationPri::mAcceptActivationEvent()
{
QSettings setting("config.ini",QSettings::IniFormat);
if(mState == true){
mtime->stop();
mtime->start(setting.value("sleeptime").toInt());
}else{
mtime->stop();
msplash->hide();
mwidget->show();
mtime->start(setting.value("sleeptime").toInt());
}
}

注:通过继承QApplication,获取全局事件处理权利

,还有一种简单的方法就是new一个widget出来遮住mainwindow
 

举报

相关推荐

0 条评论