https://blog.csdn.net/wht1003/article/details/84197493
项目需求在VS基础上做界面,因此决定采用QT插件VS
Qt的一个详细教程网站:http://c.biancheng.net/qt/
Qt实现的加法:https://www.cnblogs.com/YiYA-blog/p/10735334.html
实现QQ:https://blog.csdn.net/nigoole/article/details/7418855
一个非常简单的入门例子:https://blog.csdn.net/mieleizhi0522/article/details/79259222
使用过程中的记录:
- 在类QT1中添加槽函数时,切记要加上“private slots:”,否则不起作用。
- 我的VS2017里没有自动生成ui.xxx.h文件,这个文件在debug目录下,如果没有自动生成,需要进debug目录下查看修改
我的demo
项目代码在VS下完成,需要做一个界面,于是选择了vs2017+QT,为了走通这个使用流程,就做了一个比较简单的测试。使用UDP发送数据包,控制数据包的发送速率
主要代码如下:
值得注意的是:VS下的代码改动并不大,只是在显示输出部分的代码需要修改
#include "QtClient.h"
#pragma comment(lib, "ws2_32.lib")
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <iostream>
#include <WinSock2.h>
#include <Qstring>
QtClient::QtClient(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
}
#define PACKET_SEND_BUF 50
int packet_num_per_small_cycle = 0; //定义每个小循环所连续发送的包数目
int packet_length = 1500; //定义每个UDP数据包的字节数 B
int packet_number_per_big_cycle = 0; //定义每个大轮循环中发送的udp包数目
float sleep_rate = 0.9; //定义线程休眠的轮次次率
//int expect_sending_speed = 1500; //定义期望的每秒发送的UDP字节数
/**
* \brief 这个函数其实是把DWORD类型的数据转换为big-endian序(即大端存储,高位的放在内存低地址区,低位的放在内存高
* 地址区)
* \param pBuffer
* \param dwData
* 注意此函数有可能抛出空指针异常
*/
void WriteData(BYTE* pBuffer, DWORD dwData)
{
if (pBuffer)
{
WORD hWord = HIWORD(dwData);
WORD lWord = LOWORD(dwData);
BYTE hhByte = HIBYTE(hWord);
BYTE lhByte = LOBYTE(hWord);
BYTE hlByte = HIBYTE(lWord);
BYTE llByte = LOBYTE(lWord);
pBuffer[0] = hhByte;
pBuffer[1] = lhByte;
pBuffer[2] = hlByte;