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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 备份数据库的命令.sql

    备份数据库的命令.sql

    2021年4月25日
    118
  • 网站优化怎样的外链能轻松收录,网站外链优化攻略「建议收藏」

    网站优化怎样的外链能轻松收录,网站外链优化攻略「建议收藏」有些事情,让你感到很无奈,网站外链优化也是如此,往往那些很容易发布网站外链的地方,价值不大,而不容易发布外链的地方,一旦发布上去了,效果胜过几十条甚至更多的外链,而且可以轻松让搜索引擎收录,网站优化怎样让网站外链轻松被收录呢?<ignore_js_op>一、善于寻找我们运营的是网站,发布外链的地方也是网站,除了内容有差异之外,权重高低也有差别,我们要找的自然是高于我们权重的网站,…

    2022年7月21日
    12
  • Modifying Table Partitions

    Modifying Table PartitionsModifyingTablePartitionsOracleTipsbyBurleson Youcanmodifyatableortablepartitioninanyofthewa

    2022年6月26日
    25
  • PotPlayer安装与配置[通俗易懂]

    PotPlayer安装与配置[通俗易懂]目录1.简介2.安装3.设置基本选项设置:播放选项设置:PotPlayer皮肤设置:1.简介PotPlayer一款小巧简单的视频播放软件,具有于强大的定制能力和个性化功能。2.安装官网下载potplayerhttp://potplayer.daum.net/?lang=zh_CN下载完成后双击安装即可,选项默认。3.设置首先打开软件,按…

    2022年5月21日
    1.6K
  • python进阶(11)生成器[通俗易懂]

    python进阶(11)生成器[通俗易懂]生成器利用迭代器,我们可以在每次迭代获取数据(通过next()方法)时按照特定的规律进行生成。但是我们在实现一个迭代器时,关于当前迭代到的状态需要我们自己记录,进而才能根据当前状态生成下一个数据。

    2022年7月30日
    3
  • 焦点科技怎么老是招人_选错对焦点,错失好照片,你了解相机的对焦吗?

    焦点科技怎么老是招人_选错对焦点,错失好照片,你了解相机的对焦吗?对焦一直是衡量相机的性能的重要参数,在很长的一段时间里,我们因为相机的对焦系统不够强大,而习惯的单点手动设置对焦。而近几年微单相机的对焦快速发展,眼部自动对焦已经比较成熟,而我们的习惯也应该发生改变……选错对焦点,错失好照片多好的构图,妹子笑的多甜,然而就是因为焦点没有对准,成功的变成一张废片。很多人和我抱怨过,什么镜头跑焦,机身跑焦,可是你们有没有从自身找过原因,当真找到正确的焦点,准确合…

    2022年6月6日
    328

发表回复

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

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