核心功能:强制用户无法操作计算机all_time分钟
(在多块屏幕下,仍有办法把本exe关闭)(开启一个任务管理器,移动它至另一块屏幕,找到目标进程,关闭进程即可)
demo功能:强制锁屏30min
(未完全实现)
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();
protected:void resizeEvent(QResizeEvent *event);void paintEvent(QPaintEvent *event);
private:Ui::Widget *ui;QRect screenGeometry;int all_time;int gone_time;QTimer *timer;QString str;
};#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QScreen>
#include <QPainter>
#include <QTimer>
#include <QDateTime>
Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);setWindowFlags(Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint|Qt::Tool);QScreen * screen=QGuiApplication::primaryScreen();screenGeometry = screen->geometry();qDebug()<<screenGeometry;setGeometry(screenGeometry);all_time=30;gone_time=0;timer=new QTimer(this);connect(timer,&QTimer::timeout,this,[=](){static int m=0;m++;QDateTime begin_time = QDateTime::currentDateTime();//获取系统现在的时间QString begin =begin_time.toString("yyyy年MM月dd日hh时mm分ss秒");str=QString("%1\n您已休息%2min,仍需休息%3min").arg(begin).arg(gone_time).arg(all_time-gone_time);if(m==60){gone_time++;m=0;}update();});timer->start(1000);
}
Widget::~Widget()
{delete ui;
}void Widget::resizeEvent(QResizeEvent *event)
{qDebug()<<this->size();
}void Widget::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.save();painter.setBrush(QBrush(QColor(0,0,0)));painter.drawRect(screenGeometry);painter.restore();painter.save();QFont font = this->font();font.setPointSize(30);painter.setFont(font);painter.setPen(QPen(Qt::white,5));painter.drawText(screenGeometry,Qt::AlignCenter | Qt::TextWordWrap,str);painter.restore();
}
效果(正在审核中)。。。
setWindowFlags(Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint|Qt::Tool);
Qt::FramelessWindowHint:无边框
Qt::WindowStaysOnTopHint:使窗口位于最上层
Qt::Tool:使窗口在任务栏的图标消失
QScreen * screen=QGuiApplication::primaryScreen();screenGeometry = screen->geometry();
获取屏幕的分辨率大小:我的是1920*1080