QT屏幕保护程序二

来源:互联网 发布:那个基金软件好 编辑:程序博客网 时间:2024/05/22 09:45

前面我们用继承QApplication的方式实现了屏幕保护,

接下了用第二种方式:

首先定义一个屏保类:

#ifndef SPLASHSCREEN_H#define SPLASHSCREEN_H#include <QWidget>#include "mainwindow.h"namespace Ui {class SplashScreen;}class SplashScreen : public QWidget{    Q_OBJECTpublic:    explicit SplashScreen(QWidget *parent = 0);    ~SplashScreen();protected:    void keyPressEvent(QKeyEvent *e);private:    Ui::SplashScreen *ui;};#endif // SPLASHSCREEN_H


cpp.文件
#include "splashscreen.h"#include "ui_splashscreen.h"#include <QImage>#include <QDebug>SplashScreen::SplashScreen(QWidget *parent) :    QWidget(parent),    ui(new Ui::SplashScreen){    ui->setupUi(this);    QImage *image = new QImage(":/style/ui_image/load.png");    ui->label->setPixmap(QPixmap::fromImage(*image));}SplashScreen::~SplashScreen(){    delete ui;}void SplashScreen::keyPressEvent(QKeyEvent *e){    this->hide();    ((MainWindow*)this->parentWidget())->currentWidgetChanged(3);}


主函数中:

 QApplication app(argc, argv);
    MainWindow mainWin;
    mainWin.show();
    app.installEventFilter(&mainWin);
return app.exec();
将mainWin注册一个焦点过滤事件,写一个定时器的槽函数
mainwindow.h文件中添加:
private slots:
 void splashTimeTimeoutSlot();
protected:
    bool eventFilter(QObject *obj, QEvent *event);
private:
QWidget *pSplashTimeWidget = Q_NULLPTR;

//定义一个计时器,多久进入屏幕保护
QTimer splashTime;

//重写过滤事件函数
mainwindow.cpp文件中实现两个函数:
在mainwindow的构造函数中:
    pSplashTimeWidget = new SplashScreen(this);
    pSplashTimeWidget->hide();
   connect(&splashTime,SIGNAL(timeout()),this,SLOT(splashTimeTimeoutSlot()));
//实例化并隐藏

bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
    if (event->type() == QEvent::KeyPress) {
        //        if(sysInfo.sleeptime = "")
        //   {
        splashTime.start(5000);
    }
    return QObject::eventFilter(obj, event);
}
void MainWindow::splashTimeTimeoutSlot()
{
    pSplashTimeWidget->show();
    pSplashTimeWidget->grabKeyboard();
}



原创粉丝点击