2.第一个qt6窗口程序
qt1.窗口1.src/main.cpp12345678910111213#include <QApplication>#include <QDebug>#include <QWidget>int main(int argc, char *argv[]){ QApplication a(argc, argv); QWidget *hw = new QWidget(); //main GUI window hw->show(); //hw is the real window return a.exec();}
2.动态链接CMakelists.txt1234567891011121314151617181920212223242526272829303132cmake_minimum_required(VERSION 3.24.0)# 设置项目名称和版本project(MyQtApp VERSION 0.1 LANGUAGES CXX)set(CMAKE_INCLUDE ...
1.第一个qt6控制台程序
qt1.控制台程序1.src/main.cpp12345678910#include <QCoreApplication>int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); qDebug("hello,world\n"); qDebug() << "hi:" << "see you"; return a.exec();}
2.CMakeLists.txt123456789101112131415161718192021222324252627282930cmake_minimum_required(VERSION 3.24.0)# 设置项目名称和版本project(MyQtApp VERSION 0.1 LANGUAGES CXX)#系统变量中没有Qt目录需要添加路径option(USE_STATIC_QT "是否使用静态Qt" OFF) ...
1.第一个qt6控制台程序
qt1.控制台程序1.src/main.cpp12345678910#include <QCoreApplication>int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); qDebug("hello,world\n"); qDebug() << "hi:" << "see you"; return a.exec();}
2.Linux下编译CMakeLists.txt1234567891011121314151617cmake_minimum_required(VERSION 3.14)# 设置项目名称和版本project(MyQtApp VERSION 0.1 LANGUAGES CXX)# 查找 Qt 6 包find_package(Qt6 REQUIRED COMPONENTS Core)# 设置 C++ 标准set(CMAKE_CXX_STANDA ...
4.QT使用https协议通信
1. Qt6使用https协议在客户端发送一条文字消息到服务器端。之前的 HTTP 示例改成 HTTPS,这样客户端通过 TLS 加密发送一条文字消息到服务器端。 这里有几个关键点需要注意:
🔑 关键变化
Qt 客户端
使用 QNetworkAccessManager + QNetworkRequest,但 URL 必须是 https://
需要配置 QSslConfiguration(证书验证、加密套件等)
如果是自签名证书,需要在客户端信任它(开发阶段可以临时忽略验证)
服务器端
Qt 自带的 QTcpServer 不直接支持 HTTPS,需要用 QSslSocket 或 QTcpServer+QSslSocket 组合
必须加载服务器的私钥和证书(PEM 格式)
证书可以用 openssl 自签名生成
1️⃣ 生成自签名证书(开发测试用)
在终端执行:
1openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout server.key -out server.crt
然后合并成一个 .pem ...
3.QT使用http协议通信
1. Qt6使用http协议在客户端发送一条文字消息到服务器端。1.httpserver
main.cpp
12345678910#include <QCoreApplication>#include "httpserver.h"int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); HttpServer server; return a.exec();}
httpserver.h
1234567891011121314151617181920212223#ifndef HTTPSERVER_H#define HTTPSERVER_H#include <QObject>#include <QTcpServer>#include <QTcpSocket>class HttpServer : public QObject{ Q_OBJECTpublic: explicit HttpSer ...
2.QT使用tcp通信
1. Qt6使用tcp协议建立连接后在客户端发送一条文字消息到服务器端而后断开连接。编写两个使用qt6框架开发的程序一个是服务端一个是客户端,Qt6使用tcp协议建立连接后在客户端发送一条文字消息到服务器端而后断开连接,无ui界面,按照qt风格分开声明与实现,参考qwiget模板但是没有ui。
实现一个最简单的 一次性连接:
客户端:启动后连接服务器 → 发送一条文字消息 → 断开连接
服务器:监听端口 → 接收连接 → 读取消息 → 打印到控制台
无 UI,但结构参考 Qt Widget 模板(main.cpp + 一个 QObject 派生类,分头文件和实现文件)
Qt6 + CMake,客户端和服务端是两个独立项目
1.tcpserver
main.cpp
12345678910#include <QCoreApplication>#include "tcpserver.h"int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); TcpServe ...
1.QT使用udp通信
1. Qt6使用udp协议在客户端发送一条文字消息到服务器端。编写两个使用qt6框架开发的程序一个是服务端一个是客户端,单独使用cmake管理项目,Qt6使用udp协议在客户端发送一条文字消息到服务器端,无ui界面,按照qt风格分开声明与实现。
1.udpserver
main.cpp
12345678910#include <QCoreApplication>#include "udpserver.h"int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); UdpServer server; return a.exec();}
udpserver.h
12345678910111213141516171819202122#ifndef UDPSERVER_H#define UDPSERVER_H#include <QObject>#include <QUdpSocket>#include <QHostAddr ...
windows驱动开发39.利用结构体实现一个控制码多个功能的驱动通信方式
利用结构体实现一个控制码多个功能的驱动通信方式✅ SharedProtocol.h(通信协议头)12345678910111213141516171819#pragma once#define MAX_PAYLOAD 512// IOCTL 定义#define IOCTL_EXCHANGE_MESSAGE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800, METHOD_BUFFERED, FILE_ANY_ACCESS)// 消息类型typedef enum _MESSAGE_TYPE { MSG_TYPE_SEND = 1, MSG_TYPE_QUERY = 2} MESSAGE_TYPE;// 用户层传入结构体typedef struct _USER_REQUEST { MESSAGE_TYPE MsgType; ULONG PayloadSize; CHAR Payload[MAX_PAYLOAD];} USER_REQUEST, *PUSER_REQUEST;
✅ Common.h ...
windows驱动开发40.用户层与驱动层的其他通信方式
❓除了 IOCTL,还有没有其他通信机制?答案是:有,很多!但都有其应用场景,适合特定类型通信需求。
🧭 用户层与驱动通信的常见方式(按应用场景分类)
通信方式
说明
特点
是否支持异步
多功能支持
IOCTL(DeviceIoControl)
控制命令接口
通用、官方推荐
✅
✅ 多功能(用控制码区分)
ReadFile / WriteFile
流式通信
数据读写,适合输入/输出管道
✅
⚠️ 一般只一个方向,多功能难
IOCP + Read/Write
高性能异步 I/O
适合数据流、大量异步并发
✅
⚠️ 通常不细分功能,用 tag/结构区分
共享内存 + 信号量 / 事件
零拷贝高性能通信
非常快,适合频繁小数据交换
❌(需手动同步)
✅(共享内存结构定义)
命名管道(Named Pipe)
简单的双向通信
类似 socket,适合服务型驱动
✅
✅(靠结构/标识分功能)
Section 映射内存(ZwMapViewOfSection)
高速共享数据区
复杂内核同步,适合高级场 ...
windows驱动开发38.Linux驱动编写入口_模板_编译_加载
写一个linux驱动程序模板以下是一个Linux 内核模块(驱动)模板,适用于内核模块开发入门者,可用于字符设备、平台设备、网络驱动等的基础架构。
这个模板适用于 大多数类型的内核模块,并包括模块加载、卸载、打印日志等基础结构。
✅ Linux 驱动程序模板(C语言)1234567891011121314151617181920212223242526272829303132// my_driver.c#include <linux/module.h>#include <linux/init.h>#include <linux/kernel.h>#define DRIVER_AUTHOR "YourName"#define DRIVER_DESC "A simple Linux driver template"// 模块加载函数static int __init my_driver_init(void){ printk(KERN_INFO "my_driver: 模块加载\n&q ...
