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)
上一篇 2022年7月22日 下午7:00
下一篇 2022年7月22日 下午7:00


相关推荐

  • Cacls和ICacls

    Cacls和ICacls解释 Cacls 显示或修改文件的访问控制列表 ACL ICACLS 显示或修改自由访问控制表 Dacl 上指定的文件 并指定目录中的文件应用于存储的 Dacl 总结 显示或修改文件访问控制权限相关术语 一个 DACL Discretionar 其指出了允许和拒绝某用户或用户组的存取控制列表 当一个进程需要

    2026年3月20日
    2
  • centOS7 安装nginx并启动

    centOS7 安装nginx并启动 一、下载安装包  cd/usr/local/software (software可能没有,用mkdir创建或者只到local目录下也行)  wgethttp://nginx.org/download/nginx-1.6.2.tar.gz  (选择一个比较稳定的版本下载即可,或者手动下载后,用xshell传到该目录下也行) 二、解压安装  tar-zx…

    2022年5月7日
    173
  • php前端开发工程师简历,web前端工程师简历自我评价范文

    php前端开发工程师简历,web前端工程师简历自我评价范文web 前端工程师简历自我评价范文一有 3 年以上经验 积极向上 有良好的人际沟通能力 良好的工作协调能力 踏实肯干的工作精神 不断学习新技术 对知识有强烈的求知欲 良好的前端编程能力和编程习惯 致力于代码的整体结构规范及优化 web 前端工程师简历自我评价范文二具备前端工程师所要求的各种语言 主流框架以及软件技能 有两年的前端开发经验 熟练使用 HTML5 CSS3 等前台语言 并对 PHP thinkPHP

    2026年3月18日
    2
  • Windows程序设计——LoadImage参数及其用法「建议收藏」

    Windows程序设计——LoadImage参数及其用法「建议收藏」LoadImage是一种函数,功能是装载图标,光标,或位图。简介编辑函数功能:该函数装载图标,光标,或位图。函数原型:HANDLE LoadImage(HINSTANCE hinst,LPCTSTR lpszName,UINT uType,int cxDesired,int cyDesired,UINT fuLoad);参数hinst:处理包含被装载图像模块的实例。若要…

    2022年8月18日
    17
  • pycharm注释多行_eclipse多行注释快捷键

    pycharm注释多行_eclipse多行注释快捷键1、Pycharm同时编辑多行:alt+shift+ctral+鼠标左键2、Pycharm同时多行注释:多行选中后ctrl+\

    2022年8月26日
    13
  • 基于实践的LabVIEW零基础入门视频教程

    原文地址::http://blog.eeecontrol.com/LabVIEW1/《基于实践的LabVIEW零基础入门视频教程》资料不在多,而在于精,资料太多,反而会迷失方向,学习最怕的就是打乱仗,选择对的方向,比努力更重要,这也是本人的亲身经历!《基于实践的LabVIEW零基础入门视频教程》方向明确,适合零基础和初学者,针对性强,本课程将用项目与实践的方法带领大家零

    2022年4月5日
    60

发表回复

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

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