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

通过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");
    }
}

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

  1. c语言怎么自定义关机时间,C语言编写简单的定时关机程序

    搜索热词 写一个定时关机的小程序,可以立即关闭计算机,也可以一段时间后关闭计算机. 这里主要考察system()命令. 代码实现: #include #include #include int mai ...

  2. 用bat写一个定时关机程序

    用Windows自带的命令行工具shutdown.exe来编写批处理定时关机程序.下面是一个简单的bat脚本示例: 方法一 设置秒数关机 打开记事本复制下面信息进去->另存为.bat文件-> ...

  3. java语句电脑定时关机_月光软件站 - 编程文档 - Java - windows定时关机程序

    应网友yangxjn需要写的一个windows定时关机程序 . /** * Created by IntelliJ IDEA. * autor:cofbean * Date: 2004-3-10 * ...

  4. Python-Tkinter和PyInstaller简介及定时关机程序的简易实现

    欢迎转载,转载请注明出处,感谢! Tkinter简介 Tkinter的基本概念 1. Widgets(窗口小部件) 2. Geometry Management(几何管理) 3. Event Hand ...

  5. 一个晚上十点定时关机程序

    一个晚上十点定时关机程序 方法1:考虑使用批处理文件,建立一个shut.bat文件,打开记事本编辑以下内容: :loop timeout 10 set hour=%time:~0,2% if %hou ...

  6. Java自动定时关机程序

    这是本人的第一次写Java博客,先来写一个简单的,很多小伙伴以前应该都试过自动定时关机,这次给大家带来自动定时关机的代码和取消定时关机的代码. import java.io.IOException;p ...

  7. 利用Java的GUI编写的定时关机程序

    文章目录 程序说明 运行截图 项目结构截图 main类 ActionListener1类 ItemListener1类 Jfwindow类 shut类 XialaItmeListener类 modul ...

  8. c 语言让电脑自动关机,C语言编写简单的定时关机程序

    写一个定时关机的小程序,可以立即关闭计算机,也可以一段时间后关闭计算机. 这里主要考察system()命令. 代码实现: #include #include #include int main() { ...

  9. Python QT学习——Qt Designer(二)

    QT学习 文章目录 QT学习 一.Qt Designer 简介 二.使用方法 三.动态加载UI文件 一.Qt Designer 简介 QT程序界面的 一个个窗口.控件,就是像上面那样用相应的代码创建出 ...

  10. Swing定时关机程序

    本人新手一个,前几天看了一个网上写的定时关机小程序,我就尝试写了一个,程序很简单,毕竟我学习时间还是很短暂. 转载于:https://blog.51cto.com/listar/1198088

最新文章

  1. sdk没有登录什么意思_不需要接入SDK的第三方登录及分享
  2. ganglia 监控mysql_Ganglia监控MySQL
  3. 影响线型缩聚物分子量的因素_【CRPS】通过硼烷引发剂实现氧气引发的超高分子量聚合物的可控合成...
  4. ORACLE TO_CHAR的一个问题
  5. C/C++控制台应用程序——画三角形、圆、直线、矩形
  6. 显式调用构造函数产生的悲剧
  7. jQuery中$.get()、$.post()和$.ajax()
  8. C++之STL种类及实现
  9. tbytes 转 十六进制 string
  10. Arduino用作usb转ttl串口调试工具
  11. 从零开始学习Android开发-创建第一个App
  12. CASS11最新版免狗下载安装教程
  13. wpsmac和pc版的区别_WPS Mac版本与Microsoft有什么区别?
  14. Java 识别读取pdf中的二维码信息
  15. 基于SSH商场管理系统
  16. JAVAweb开发技术-------(七)POI导入导出excel技术
  17. 新增spring Converter解析器中使用lambda表达式代替匿名内部类是启动报错:... does the class parameterize those types?
  18. RHCE培训多少钱?
  19. 【win】系统工具Win PE
  20. birt 报表与润乾报表对比

热门文章

  1. 『动态规划』矩阵连乘
  2. python 制作标签云
  3. mac php环境一键安装包,XAMPP for Mac 8.0.0 PHP集成环境一键安装包
  4. IOS-音乐播放器(附Demo)
  5. Hyperscan Windows 编译指南
  6. C语言自学之路十一(详解C语言操作符一)
  7. 警告怎么去除Reports empty tag body. The validation works in XML / JSP / JSPX / HTML/ XHTML file types
  8. Axure谷歌浏览器插件
  9. remp在matlab,基于Matlab的最小二乘支持向量机的工具箱及其应用
  10. java前后端分离跨域解决方案