①读写关机时间配置XML的代码 XML路径为%HOME%/config.xml 读 QDomDocument domDocument; QString fileName = QDir::homePath(); fileName += "/config.xml"; QFile file(fileName); if (!file.open(QFile::ReadOnly | QFile::Text)) { QMessageBox::warning(this, tr("timer shutDown"), tr("Cannot read file %1:/n%2.in current Path:%3") .arg(fileName) .arg(file.errorString()) .arg(QDir::currentPath())); setDefaultShutDownTime(); return; } QString errorStr; int errorLine; int errorColumn; if (!domDocument.setContent(&file, true, &errorStr, &errorLine, &errorColumn)) { QMessageBox::information(this, tr("timer shutDown"), tr("Parse error at line %1, column %2:/n%3") .arg(errorLine) .arg(errorColumn) .arg(errorStr)); setDefaultShutDownTime(); file.close(); return; } QDomElement root = domDocument.documentElement(); if (root.tagName() != "settings") { QMessageBox::information(this, tr("DOM Bookmarks"), tr("The file is not an timer setting file.")); setDefaultShutDownTime(); file.close(); return; } QString strHour,strMinute,strSecond; QDomElement child = root.firstChildElement("hour"); if(!child.isNull()) { strHour = child.text(); } else{ setDefaultShutDownTime(); file.close(); return; } child = root.firstChildElement("minute"); if(!child.isNull()) { strMinute = child.text(); } else { setDefaultShutDownTime(); file.close(); return; } child = root.firstChildElement("second"); if(!child.isNull()) { strSecond = child.text(); } else{ setDefaultShutDownTime(); file.close(); return; } _timeShutDown.setHMS(strHour.toInt(),strMinute.toInt(),strSecond.toInt()); file.close(); 写 void MainWindow::saveShutDownTimeToXml(QTime timeShutDown){ QDomDocument domDocument; QDomElement root = domDocument.createElement("settings"); domDocument.appendChild(root); QString strHour,strMinute,strSecond; strHour.setNum(timeShutDown.hour()); strMinute.setNum(timeShutDown.minute()); strSecond.setNum(timeShutDown.second()); QDomElement tagHour = domDocument.createElement("hour"); QDomText text_Hour = domDocument.createTextNode(strHour); tagHour.appendChild(text_Hour); root.appendChild(tagHour); QDomElement tagMiunte = domDocument.createElement("minute"); QDomText text_Miunte = domDocument.createTextNode(strMinute); tagMiunte.appendChild(text_Miunte); root.appendChild(tagMiunte); QDomElement tagSecond = domDocument.createElement("second"); QDomText text_Second = domDocument.createTextNode(strSecond); tagSecond.appendChild(text_Second); root.appendChild(tagSecond); QString fileName = QDir::homePath() + "/config.xml";; QFile fileWrite(fileName); if (!fileWrite.open(QFile::WriteOnly | QFile::Text)) { QMessageBox::warning(this, tr("timer shutDown"), tr("Cannot open file %1:/n%2.in current Path:%3") .arg(fileName) .arg(fileWrite.errorString()) .arg(QDir::currentPath())); return; } const int IndentSize = 4; QTextStream out(&fileWrite); domDocument.save(out, IndentSize); fileWrite.close(); } 关机定时器构造函数: MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); _Timer = new QTimer(this); _Timer->setInterval(1000); connect(_Timer,SIGNAL(timeout()),this,SLOT(timeRefresh())); readShutDownTimeFromXml(); ui->timeEdit->setTime(_timeShutDown); connect(ui->timeEdit,SIGNAL(timeChanged(QTime)),this,SLOT(ShutDownTimeChanged(QTime))); createActions(); createTrayIcon(); showMinimized(); _Timer->start(); } 关机代码: void MainWindow::timeRefresh(){ QTime tm = QTime::currentTime () ; QString strTime = tm.toString(); ui->label_Time->setText(strTime); if(tm > _timeShutDown){ // QMessageBox::information(this,"shut down","shut down"); QString program = "C:/WINDOWS/system32/shutdown.exe"; QStringList arguments; arguments << "-s"; QProcess *myProcess = new QProcess(); myProcess->start(program, arguments); } else{ int seconds = tm.secsTo(_timeShutDown); int hours = seconds/3600; seconds -= hours*3600; int minutes = seconds/60; seconds -= minutes*60; QString strTimeLeft = tr("time left %1:%2:%3") .arg(hours) .arg(minutes) .arg(seconds); trayIcon->setToolTip(strTimeLeft); setWindowTitle(strTimeLeft); } }