QT实现自动关机

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lms1008611/article/details/81508628

    当今的非标设备,对于客户来说,使用越简单越方便越好,有时候客户不想通过手工去关工控机,只要PLC端关闭后,工控机也自动关闭,这在QT中很容易实现。

    首先PLC与工控机上的上位机是正常连接的,只要PLC给上位机发送一个关机指令(自己协商定义),上位机中稍作处理就能自动关机,下边直接来看QT接收socket信息的槽函数clientReadData(),这里的关机指令我们假定为"SHUTDOWN",及收到该指令后便启动关机操作,QT中提供了QProcess类来执行第三方程序,这里只给出了关键部分的代码

connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(clientReadData()));

//接收数据
void clientReadData()
{
    QString msg = tcpSocket->readAll();

    f ("SHUTDOWN" == msg)
    {
    	QProcess pro;    //通过QProcess类来执行第三方程序
    	QString cmd = QString("shutdown -s -t 0"); //shutdown -s -t 0 是window下的关机命令,

    	pro.start(cmd);    //执行命令cmd
    	pro.waitForStarted();
    	pro.waitForFinished();
    	close();    //关闭上位机
    }
}

上述代码,当服务器发来"SHUTDWON",便自动关机,知道这个功能,我们便可以使用定时器自己完成一个定时关机的软件了。

对于QProcess,如果我们想启动一个别的应用程序,如记事本程序,那么如下:

QProcess pro;
QString cmd = QString("C:\\Windows\\System32\\notepad.exe"); //也可换成别的应用程序路径,那么启动的就是对应的应用程序

pro.start(cmd);
pro.waitForStarted();
pro.waitForFinished();

 

展开阅读全文

没有更多推荐了,返回首页