#include "MainWidget.h"
#include<qmath.h>
#include<qpainter.h>
#include<QHBoxLayout>
#include<QVBoxLayout>
#include<QSpacerItem>
#include<QApplication>
#include<QLabel>
#include<windows.h>
#include<QSettings>
#include<QIntValidator>
#include<QToolTip>
#include<QMessageBox>
#include<QDebug>
#include"qxtglobalshortcut.h"
#define REG_RUN "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run"
MainWidget::MainWidget(QWidget *parent) : AbsFrameLessAutoSize(parent)
{
QxtGlobalShortcut* shortcut = new QxtGlobalShortcut(QKeySequence("Ctrl+Z"),this);
connect(shortcut, SIGNAL(activated()), this, SLOT(show()));
initMSIC();
initTopWidget();
initStack0();
initStack1();
initMidWidget();
initBottomWidget();
initTrayMenu();
initTrayIcon();
LayoutAll();
initTimer();
readConfig();
}
void MainWidget::initMSIC()
{
m_index=0;
m_checkIndex=0;
m_border=8;
setAttribute(Qt::WA_TranslucentBackground);
setMinimumSize(400,300);
setMaximumSize(600,450);
m_mainWid=new AbsWidget(this);
QVBoxLayout *vl=new QVBoxLayout;
vl->addWidget(m_mainWid);
vl->setContentsMargins(6,6,6,6);
setLayout(vl);
m_mainWid->setStyleSheet("AbsWidget{border-image:url(:/bg.jpg);}"
"QLabel{color:rgb(68,68,68);font-size:14px;}"
"QCheckBox{color:rgb(68,68,68);}");
}
void MainWidget::initTopWidget()
{
m_top=new AbsWidget(m_mainWid);
m_top->setFixedHeight(30);
m_top->setStyleSheet("AbsWidget{border-image:NULL;background:transparent;}");
m_btnClose=new myPushButton(m_top);
m_btnClose->setFixedSize(18,18);
m_btnClose->setStyleSheet("QPushButton{border-image: url(:/btn_close (1).png);}"
"QPushButton:hover{border-image: url(:/btn_close (2).png);}"
"QPushButton:pressed{border-image: url(:/btn_close (3).png);}");
connect(m_btnClose,SIGNAL(clicked(bool)),this,SLOT(hide()));
QLabel *label=new QLabel("简易关机--爱人版",m_top);
label->setStyleSheet("QLabel{font-family:微软雅黑;font-size: 14px;color:white;}");
QHBoxLayout *hl=new QHBoxLayout;
hl->addWidget(label);
hl->addSpacerItem(new QSpacerItem(10,10,QSizePolicy::Expanding,QSizePolicy::Expanding));
hl->addWidget(m_btnClose);
hl->setSpacing(4);
hl->setContentsMargins(4,5,4,5);
m_top->setLayout(hl);
}
void MainWidget::initStack0()
{
m_stack0=new AbsWidget(this);
m_stack0->setStyleSheet("border-image:null;background:white;");
QHBoxLayout *hl=new QHBoxLayout;
m_lineEditHour=new QLineEdit(m_stack0);
m_lineEditMinute=new QLineEdit(m_stack0);
m_lineEditHour->setFixedSize(40,20);
m_lineEditMinute->setFixedSize(40,20);
QValidator *validator =new QIntValidator(0,23,this);
m_lineEditHour->setValidator(validator);
QValidator *validator2 =new QIntValidator(0,59,this);
m_lineEditMinute->setValidator(validator2);
QLabel *label=new QLabel(":",m_stack0);
label->setStyleSheet("color:gray;font:bold;");
label->adjustSize();
hl->addStretch(1);
hl->addWidget(m_lineEditHour);
hl->addWidget(label);
hl->addWidget(m_lineEditMinute);
hl->addStretch(1);
m_TimeRemainlabel=new QLabel("未开启关机时间",m_stack0);
m_TimeRemainlabel->setAlignment(Qt::AlignCenter);
QHBoxLayout *hl2=new QHBoxLayout;
m_checkBox0=new QCheckBox("仅一次",this);
m_checkBox0->setChecked(true);
m_checkBox1=new QCheckBox("每天",this);
connect(m_checkBox0,SIGNAL(stateChanged(int)),this,SLOT(slot_checkBoxClicked(int)));
connect(m_checkBox1,SIGNAL(stateChanged(int)),this,SLOT(slot_checkBoxClicked(int)));
hl2->addStretch(1);
hl2->addWidget(m_checkBox0);
hl2->addSpacing(50);
hl2->addWidget(m_checkBox1);
hl2->addStretch(1);
hl2->setContentsMargins(0,20,0,5);
QVBoxLayout *vl=new QVBoxLayout;
vl->addWidget(m_TimeRemainlabel);
vl->addLayout(hl);
vl->addLayout(hl2);
m_stack0->setLayout(vl);
}
void MainWidget::initStack1()
{
m_stack1=new AbsWidget(this);
m_stack1->setStyleSheet("border-image:null;background:blue;");
}
void MainWidget::initMidWidget()
{
m_midstack=new myStackWidget(m_mainWid);
m_midstack->setStyleSheet("background:white;");
m_midstack->addWidget(m_stack0);
m_midstack->addWidget(m_stack1);
}
void MainWidget::initBottomWidget()
{
m_bottom=new AbsWidget(m_mainWid);
m_bottom->drawTopLine();
m_bottom->setFixedHeight(60);
m_bottom->setStyleSheet("AbsWidget{border-image:NULL;background:white;}");
m_btnChangeStack=new myPushButton("使用倒计时模式",m_bottom);
m_btnStart=new myPushButton("开始",m_bottom);
m_btnStop=new myPushButton("停止",m_bottom);
m_btnChangeStack->setFixedSize(100,40);
m_btnStart->setFixedSize(40,40);
m_btnStop->setFixedSize(40,40);
connect(m_btnChangeStack,SIGNAL(clicked(bool)),this,SLOT(slot_ChangeStackedBtnClicked()));
connect(m_btnStart,SIGNAL(clicked(bool)),this,SLOT(slot_startBtnClicked()));
connect(m_btnStop,SIGNAL(clicked(bool)),this,SLOT(slot_stopBtnClicked()));
QHBoxLayout *hl=new QHBoxLayout;
hl->addWidget(m_btnStart);
hl->addWidget(m_btnChangeStack);
hl->addWidget(m_btnStop);
m_bottom->setLayout(hl);
}
void MainWidget::initTrayIcon()
{
QIcon icon = QIcon(":/shutdown.ico");
m_trayIcon = new QSystemTrayIcon(this);
m_trayIcon->setIcon(icon);
m_trayIcon->setToolTip("正在运行");
m_trayIcon->setContextMenu(m_trayMenu);
m_trayIcon->show();
connect(m_trayIcon,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
this,SLOT(slot_trayiconActivated(QSystemTrayIcon::ActivationReason)));
}
void MainWidget::initTrayMenu()
{
m_trayMenu=new QMenu(this);
QAction*act=new QAction("退出程序",m_trayMenu);
m_trayMenu->addAction(act);
connect(act,SIGNAL(triggered(bool)),qApp,SLOT(quit()));
}
void MainWidget::LayoutAll()
{
QVBoxLayout *vl=new QVBoxLayout;
vl->addWidget(m_top);
vl->addWidget(m_midstack);
vl->addWidget(m_bottom);
vl->setSpacing(0);
vl->setContentsMargins(0,0,0,0);
m_mainWid->setLayout(vl);
}
void MainWidget::initTimer()
{
m_timer=new QTimer(this);
connect(m_timer,SIGNAL(timeout()),this,SLOT(slot_timerWork()));
}
void MainWidget::readConfig()
{
QSettings setting("config.ini",QSettings::IniFormat,0);
setting.beginGroup("mainWindow");
if(!setting.value("CURRENTSTACK").toInt())//stack one
{
if(setting.value("MODE").toInt())
{
m_checkBox1->setChecked(true);
int hour=setting.value("HOUR").toInt();
int minute=setting.value("MINUTES").toInt();
m_time.setHMS(hour,minute,0);
m_lineEditHour->setText(QString::number(hour));
m_lineEditMinute->setText(QString::number(minute));
emit m_btnStart->clicked();
}
}
else//stack two
{
}
setting.endGroup();
}
void MainWidget::saveConfig()
{
QSettings setting("config.ini",QSettings::IniFormat,0);
setting.beginGroup("mainWindow");
setting.setValue("CURRENTSTACK",m_index);
setting.setValue("MODE",m_checkIndex);
setting.setValue("HOUR",m_time.hour());
setting.setValue("MINUTES",m_time.minute());
setting.endGroup();
}
void MainWidget::shutDown()
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken))
{
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPri
Qt/C++ 定时关机!
4星 · 超过85%的资源 需积分: 34 28 浏览量
2016-12-28
22:44:15
上传
评论 3
收藏 5.91MB RAR 举报
小乌龟在大乌龟背上
- 粉丝: 954
- 资源: 27
最新资源
- 2023 年电子设计竞赛试题.zip
- springboot+activiti+angular 这是spring boot框架集成activiti工作流实现.zip
- 基于Python的PCA人脸识别算法的原理及实现代码+文档详解.zip
- 《人工智能AI生成图片》
- springboot 整合jpa框架和querydsl框架,实现多数据源数据增删改查.zip
- SpringBoot + LayUI 框架快速搭建WEB网站.zip
- 基于python开发的的验证码识别+源码(期末大作业&课程设计&项目开发)
- douban.ipynb
- 基于C#的游戏服务器后台.zip
- 基于neo4j制作的医药领域-疾病诊断知识图谱dump文件
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈