Qt学习—qt编写定时关机程序

Qt学习—qt编写定时关机程序编写了一个简单的定时关机程序,软件界面如下。顺便记录一下所用的控件的一些简单的使用方法。程序中用到的控件主要是QLCDNumber(数码管控件)以及QSpinBox()(滚动框控件)。通过system()调用系统的关机命令。需要包含头文件stdlib.h。此外涉及到数码管以及滚动框显示数字时,前缀“0”的显示和消隐的问题。以下是代码。首先是main.cpp#include

大家好,又见面了,我是你们的朋友全栈君。

编写了一个简单的定时关机程序,软件界面如下。顺便记录一下所用的控件的一些简单的使用方法。程序中用到的控件主要是
QLCDNumber(数码管控件)以及QSpinBox()(滚动框控件)。

Qt学习—qt编写定时关机程序

通过system()调用系统的关机命令。需要包含头文件stdlib.h。此外涉及到数码管以及滚动框显示数字时,前缀“0”的显示和消隐的问题。以下是代码。

首先是main.cpp


#include <QtGui/QApplication>
#include "mainwindow.h"
#include <QTextCodec>

int main(int argc, char *argv[])
{ 
    
 QApplication a(argc, argv);
 //Qt文本的国际化显示
 QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB18030"));
 QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB18030"));
 QTextCodec::setCodecForTr(QTextCodec::codecForName("GB18030"));

 MainWindow w;
 w.show();
 
 return a.exec();
}

其次是mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

#include <QDebug>
#include <QMessageBox>

#include <stdlib.h>
#include <QTimer>
#include <QString>
#include <QByteArray>
#include <QSpinBox>

namespace Ui { 
    
class MainWindow;
}

class MainWindow : public QMainWindow
{ 
    
 Q_OBJECT
 
public:
 explicit MainWindow(QWidget *parent = 0);
 ~MainWindow();
private slots:
 void slot_pushbutton_exec();
 void slot_pushbutton_cancel();
 void slot_count_down();
 void slot_set_hour();
 void slot_set_minute();
 void slot_set_second();
private:
 Ui::MainWindow *ui;
 QTimer timer;

 void init_sys();
};

#endif // MAINWINDOW_H

最后是mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
 QMainWindow(parent),
 ui(new Ui::MainWindow)
{ 
    
 ui->setupUi(this);
 init_sys();
 QObject::connect(ui->pushButton_exec,SIGNAL(clicked()),this,SLOT(slot_pushbutton_exec()));
 QObject::connect(ui->pushButton_cancel,SIGNAL(clicked()),this,SLOT(slot_pushbutton_cancel()));
 QObject::connect(&timer,SIGNAL(timeout()),this,SLOT(slot_count_down()));
 QObject::connect(ui->spinBox_hour,SIGNAL(valueChanged(int)),this,SLOT(slot_set_hour()));
 QObject::connect(ui->spinBox_minute,SIGNAL(valueChanged(int)),this,SLOT(slot_set_minute()));
 QObject::connect(ui->spinBox_second,SIGNAL(valueChanged(int)),this,SLOT(slot_set_second()));

}

MainWindow::~MainWindow()
{ 
    
 delete ui;
}

void MainWindow::init_sys()
{ 
    
 //初始化LCD显示器
 //注:display是重载函数,当希望显示09,08,07……等数字形式时
 //采用字符串形式,可以显示前缀“0”,数字型显示会自动忽略掉0
 ui->lcdNumber_hour->display("88");
 ui->lcdNumber_minute->display("88");
 ui->lcdNumber_second->display("88");
 //设置组合框文本内容的前缀
 ui->spinBox_hour->setPrefix("0");
 ui->spinBox_minute->setPrefix("0");
 ui->spinBox_second->setPrefix("0");
 //初始化组合框文本内容
 ui->spinBox_hour->setValue(0);
 ui->spinBox_minute->setValue(0);
 ui->spinBox_second->setValue(0);
 //停止定时器
 timer.stop();
}

void MainWindow::slot_pushbutton_exec()
{ 
    
 //以索引号模式判断用户做出的选择
 int index_model = ui->comboBox_model->currentIndex();
 int index_action = ui->comboBox_action->currentIndex();

 //以当前选项文本内容判断用户做出的选择
// QString str_model = ui->comboBox_model->currentText();
// QString str_action = ui->comboBox_action->currentText();
// if(str_model = "设定时间")

 if(0==index_model) //指定关机时间模式
 { 
    
 QString second = ui->spinBox_second->text();
 QString minute = ui->spinBox_minute->text();
 QString hour = ui->spinBox_hour->text();
 QString cmd = "at "+hour+":"+minute+":"+second+" ";

 switch(index_action)
 { 
    
 case 0: //关机指令
 cmd = cmd + "shutdown -s";
 break;
 case 1: //注销指令
 cmd = cmd + "shutdown -l";
 break;
 case 2: //重启指令
 cmd = cmd + "shutdown -r";
 break;
 }
 //将QString类对象转换为char*类型
 char* ch;
 QByteArray ba = cmd.toLatin1();
 ch=ba.data();

 system(ch); //执行shell命令
 }
 else if(1==index_model) //倒计时关机模式
 { 
    
 int delay = ui->spinBox_hour->value()*3600 +
 ui->spinBox_minute->value()*60 +
 ui->spinBox_second->value();
 QString cmd = "";

 switch(index_action)
 { 
    
 case 0: //关机指令
 cmd = "shutdown -s -t "+QString::number(delay);
 break;
 case 1: //注销指令
 cmd = "shutdown -l -t "+QString::number(delay);
 break;
 case 2: //重启指令
 cmd = "shutdown -r -t "+QString::number(delay);
 break;
 }
 char* ch;
 QByteArray ba = cmd.toLatin1();
 ch=ba.data();
 system(ch);

 //当显示的数字的位数为一位时,需要加上前缀“0”,以达到09,08……的效果
 //当显示的数字为两位数时,则需要屏蔽掉前缀“0”。

 //设置LCD显示小时
 if(ui->spinBox_hour->value()<=9&&ui->spinBox_hour->value()>=0)
 ui->lcdNumber_hour->display("0"+QString::number(ui->spinBox_hour->value()));
 else
 ui->lcdNumber_hour->display(QString::number(ui->spinBox_hour->value()));
 //设置LCD显示分钟
 if(ui->spinBox_minute->value()<=9&&ui->spinBox_minute->value()>=0)
 ui->lcdNumber_minute->display("0"+QString::number(ui->spinBox_minute->value()));
 else
 ui->lcdNumber_minute->display(QString::number(ui->spinBox_minute->value()));
 //设置LCD显示秒
 if(ui->spinBox_second->value()<=9&&ui->spinBox_second->value()>=0)
 ui->lcdNumber_second->display("0"+QString::number(ui->spinBox_second->value()));
 else
 ui->lcdNumber_second->display(QString::number(ui->spinBox_second->value()));

 timer.start(1*1000);
 }
}
void MainWindow::slot_pushbutton_cancel()
{ 
    
 system("shutdown -a");
 init_sys();
}


void MainWindow::slot_count_down()
{ 
    
 int hour = ui->lcdNumber_hour->value();
 int minute = ui->lcdNumber_minute->value();
 int second = ui->lcdNumber_second->value();

 second--;
 if(second<0)
 { 
    
 second = 59;
 minute--;
 if(minute<0)
 { 
    
 minute = 59;
 hour--;
 if(hour<0)
 { 
    
 hour = 0;
 }
 }
 }

 if(hour<=9&&hour>=0)
 ui->lcdNumber_hour->display("0"+QString::number(hour));
 else
 ui->lcdNumber_hour->display(QString::number(hour));
 if(minute<=9&&minute>=0)
 ui->lcdNumber_minute->display("0"+QString::number(minute));
 else
 ui->lcdNumber_minute->display(QString::number(minute));
 if(second<=9&&second>=0)
 ui->lcdNumber_second->display("0"+QString::number(second));
 else
 ui->lcdNumber_second->display(QString::number(second));
}

void MainWindow::slot_set_hour()
{ 
    
 if(ui->spinBox_hour->value()>9)
 { 
    
 ui->spinBox_hour->setPrefix("");
 }
 else
 { 
    
 ui->spinBox_hour->setPrefix("0");
 }
}

void MainWindow::slot_set_minute()
{ 
    
 if(ui->spinBox_minute->value()>9)
 { 
    
 ui->spinBox_minute->setPrefix("");
 }
 else
 { 
    
 ui->spinBox_minute->setPrefix("0");
 }
}

void MainWindow::slot_set_second()
{ 
    
 if(ui->spinBox_second->value()>9)
 { 
    
 ui->spinBox_second->setPrefix("");
 }
 else
 { 
    
 ui->spinBox_second->setPrefix("0");
 }
}



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/162985.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 列举出linux文件和目录常用的命令_shell进入目录执行文件

    列举出linux文件和目录常用的命令_shell进入目录执行文件目录命令总览ls(英文全拼:listfiles):列出目录及文件名cd(英文全拼:changedirectory):切换目录pwd(英文全拼:printworkdirectory):显

    2022年7月31日
    6
  • 判断回文字符串-C语言

    判断回文字符串-C语言C语言实现判断字符串是否是回文描述所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如”level”、“aba”。超级简单上代码#include<stdio.h>#include<string.h>#defineNUM100intmain(){charstr[NUM];intflag=0;scanf(“%s”,str);intlen=strlen(str);for(inti=0;i

    2022年6月6日
    37
  • vue 时间戳转换成yyyy-MM-dd hh:mm[通俗易懂]

    vue 时间戳转换成yyyy-MM-dd hh:mm[通俗易懂]data的就是文件直接引入exportfunctionformatDate(date,fmt){if(/(y+)/.test(fmt)){fmt=fmt.replace(RegExp.$1,(date.getFullYear()+”).substr(4-RegExp.$1.length));}leto={‘M…

    2022年10月20日
    3
  • 在某个范围内随机生成一些数据_cut out删除造句

    在某个范围内随机生成一些数据_cut out删除造句根据yolov4文献中提到的cutout数据增广方式,进行扩展阅读。Cutout&RandomErasing1、Cutout论文地址:https://arxiv.org/pdf/1708.04552.pdf代码地址:https://github.com/Dingzixiang/cutout/blob/master/cutout.py出发点:文章的出发点除了解决遮挡问题外,还有从dropout上得到启发。众所周知…

    2022年9月2日
    6
  • es painless 排序_elasticsearch-painless-操作日期[通俗易懂]

    小编典典解决方案是使用.value{“script_fields”:{“new_date_field”:{“script”:{“inline”:”doc[‘date_field’].value+14400″}}}}但是,我实际上想将其用于重新索引,但格式略有不同。这是我在_reindexapi中操纵时间的版本POST_reindex{“source”:{“index”:”som…

    2022年4月17日
    207
  • import啥意思_import怎么导入

    import啥意思_import怎么导入前言我们在开发项目时经常会进行导包有import*格式的,还有from*import*格式的,最后就会显示的很乱,那么有没有什么工具能对导包进行一键排序呢?答案是有的,使用isort工具i

    2022年7月31日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号