Qt6-基于CMake的网络关机助手

简介: 需求背景:项目中存在多个电脑,而每个电脑在正式投入使用后,都不可以外接键盘,所以需要一个关机工具。

这个工具也非常简单,主要原理就是UDP广播的原理。主要就是接收到对应的关机指令以后,执行关机操作。同时自己也可以发送关机指令,并关闭自己所在的电脑。

程序目前还是非常简单的,就一个关机按钮。


 image.png

下面就是实现方法,新建项目啥的看上一篇

这里直接从代码开始

 

包含网络模块


在CMakeLists.txt文件中加入网络模块

find_package(Qt6 COMPONENTS Network REQUIRED)
target_link_libraries(PowerControl PRIVATE Qt6::Network)

包含相关头文件


在头文件中包含对应的头文件

#include <QUdpSocket>
#include <QHostAddress>
#include <QProcess>
#include <QDir>
#include <QtDebug>


初始化UDP Socket绑定端口


    m_Scoket = new QUdpSocket();
    m_Scoket->bind(8088,QUdpSocket::ShareAddress);
    connect(m_Scoket,&QUdpSocket::readyRead,this,&MainWindow::getUDPDate);

调用关机指令


其实实现关机的方式有很多,可以在Qt中直接加入关机指令,也可以直接调用关机程序,同样也可以使用脚本来实现关机功能,我这里将实现调用外部脚本来实现功能。

 

QString strinfo;
    QProcess p(NULL);
    QString curPath = QDir::currentPath();
    QString toolPath;
    toolPath = "/BAT";
    curPath.append(toolPath);
    p.setWorkingDirectory(curPath);
    toolPath = "/poweroff.bat";
    curPath.append(toolPath);
    p.start(curPath);
    if(p.waitForFinished())
    {
    }
    else
    {
    }

核心功能就基本完成了,在Bat文件里面直接写CMD指令就可以了。

解析就更简单了,看下

 

while (m_Scoket->hasPendingDatagrams())
    {
        QByteArray datagram;
        datagram.resize(m_Scoket->pendingDatagramSize());
        m_Scoket->readDatagram(datagram.data(),datagram.size());
        if(datagram.toInt() == 0x01)
        {
            powerOffBat();
        }
    }

这里呢,有个问题出现了,就是我把程序Release了以后你,运行的时候会有CMD窗口,好烦人,百度了一对QT相关的设置,都没有搞定,最后还是找CMake关键字找到了


解决连接在这里https://blog.csdn.net/tadashilh/article/details/105861292



防止找不到系列:



只需要在cmakelists.txt中添加set(CMAKE_CXX_FLAGS "-mwindows")


或者在cmake时指定编译参数cmake -DCMAKE_CXX_FLAGS="-mwindows"即可


如果用的是c而不是c++,就只需把CXX改为C


 


目录
相关文章
|
6月前
|
开发框架 Unix Linux
深度探索:Qt CMake工程编译后的自动打包策略
深度探索:Qt CMake工程编译后的自动打包策略
352 0
|
6月前
|
IDE 编译器 开发工具
C/C++ IDE环境 (Qt Creator visual studio等) Cmake工程不显示头文件的解决方案
C/C++ IDE环境 (Qt Creator visual studio等) Cmake工程不显示头文件的解决方案
173 0
|
4月前
|
网络协议
Qt中的网络编程(Tcp和Udp)运用详解以及简单示范案例
Tcp和Udp是我们学习网络编程中经常接触到的两个通讯协议,在Qt也被Qt封装成了自己的库供我们调用,对于需要进行网络交互的项目中无疑是很重要的,希望这篇文章可以帮助到大家。 是关于Qt中TCP和UDP的基本使用和特点:
657 7
|
2月前
|
安全 Windows
怎样利用 Windows XP实现网络统一关机
怎样利用 Windows XP实现网络统一关机
怎样利用 Windows XP实现网络统一关机
|
3月前
|
C++
C++ Qt开发:QUdpSocket网络通信组件
QUdpSocket是Qt网络编程中一个非常有用的组件,它提供了在UDP协议下进行数据发送和接收的能力。通过简单的方法和信号,可以轻松实现基于UDP的网络通信。不过,需要注意的是,UDP协议本身不保证数据的可靠传输,因此在使用QUdpSocket时,可能需要在应用层实现一些机制来保证数据的完整性和顺序,或者选择在适用的场景下使用UDP协议。
158 2
Qt开发网络嗅探器02
Qt开发网络嗅探器02
|
3月前
|
存储 运维 监控
Qt开发网络嗅探器01
Qt开发网络嗅探器01
|
3月前
|
网络协议 容器
Qt开发网络嗅探器03
Qt开发网络嗅探器03
|
3月前
CMake自动打包--Qt项目
CMake自动打包--Qt项目
55 0
|
5月前
|
IDE Linux 开发工具
在Qt开发环境中qmake和cmake的区别优势
选择qmake还是CMake,主要取决于项目的需求和开发者的熟悉程度。如果你正在开发一个纯Qt项目,或者是一个不需要复杂构建脚本的小型项目,qmake可能是一个更好的选择。反之,如果你的项目需要处理复杂的依赖关系,或者你想要一个在多种编程环境中都能工作的构建系统,那么CMake可能是更好的选择。
836 2

推荐镜像

更多