Qt+vs 2017入門とチュートリアル
31349 ワード
https://blog.csdn.net/wht1003/article/details/84197493プロジェクトはVSに基づいてインタフェースを行う必要があるため、QTプラグインVSを採用することにした.
Qtの詳細なチュートリアルWebサイト:http://c.biancheng.net/qt/Qt実現の加算:https://www.cnblogs.com/YiYA-blog/p/10735334.htmlQQを実現する:https://blog.csdn.net/nigoole/article/details/7418855非常に簡単な入門例です.https://blog.csdn.net/mieleizhi0522/article/details/79259222
使用中のレコード:クラスQT 1にスロット関数を追加する場合は、「private slots:」を付けないと機能しないことを忘れないでください. 私のVS 2017ではuiが自動的に生成されていません.xxx.hファイル、このファイルはdebugディレクトリの下で、自動的に生成されていない場合は、debugディレクトリの下で変更 を表示する必要があります.
私のdemoプロジェクトコードはVSの下で完成して、1つのインタフェースをする必要があって、そこでvs 2017+QTを選んで、この使用の流れを通るために、1つの比較的に簡単なテストをしました.UDPを使用してパケットを送信し、パケットの送信速度を制御する主なコードは以下の通りである:VSの下のコードの変更は大きくなく、表示出力部分のコードを修正する必要がある
画面は簡単です: 2はボタンを押して、ピクチャーを表示しますhttps://blog.csdn.net/neigetiantian/article/details/77337620
Qtの詳細なチュートリアルWebサイト:http://c.biancheng.net/qt/Qt実現の加算:https://www.cnblogs.com/YiYA-blog/p/10735334.htmlQQを実現する:https://blog.csdn.net/nigoole/article/details/7418855非常に簡単な入門例です.https://blog.csdn.net/mieleizhi0522/article/details/79259222
使用中のレコード:
私のdemoプロジェクトコードはVSの下で完成して、1つのインタフェースをする必要があって、そこでvs 2017+QTを選んで、この使用の流れを通るために、1つの比較的に簡単なテストをしました.UDPを使用してパケットを送信し、パケットの送信速度を制御する主なコードは以下の通りである:VSの下のコードの変更は大きくなく、表示出力部分のコードを修正する必要がある
#include "QtClient.h"
#pragma comment(lib, "ws2_32.lib")
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include
#include
#include
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;
pBuffer[3] = llByte;
}
}
/**
* \brief WriteData , DWORD
* \param pBuffer
* \return
*/
DWORD ReadData(BYTE* pBuffer)
{
DWORD dwValue = 0;
if (pBuffer)
{
BYTE hhByte = pBuffer[0];
BYTE lhByte = pBuffer[1];
BYTE hlByte = pBuffer[2];
BYTE llByte = pBuffer[3];
WORD hWord = MAKEWORD(lhByte, hhByte);
WORD lWord = MAKEWORD(llByte, hlByte);
dwValue = MAKELONG(lWord, hWord);
}
return dwValue;
}
/**
* \brief
* \param packet_send
* \param packet_index
* \return
*/
bool EncodePacket(BYTE* packet_send, int packet_index)
{
packet_send++;
WriteData(packet_send, packet_index);
return true;
}
int QtClient::on_sendbutton_clicked()
{
//
WSADATA wsa;
WSAStartup(WINSOCK_VERSION, &wsa);
//
SOCKADDR_IN serveraddr;
// ,IP,
serveraddr.sin_family = AF_INET;
serveraddr.sin_port = htons(5001);
serveraddr.sin_addr.s_addr = inet_addr("192.168.3.101");
//serveraddr.sin_addr.s_addr = inet_addr("169.254.209.176"); // IP
//serveraddr.sin_addr.s_addr = inet_addr("169.254.249.152"); // IP
if (serveraddr.sin_addr.s_addr == INADDR_NONE)
{
printf(" !
");
return -1;
}
//
SOCKET client_socket = socket(AF_INET, SOCK_DGRAM, 0);
//int time_out = 200000; //
//setsockopt(client_socket, SOL_SOCKET, SO_RCVTIMEO, (char*)&time_out, sizeof(time_out));
//const char chOpt = 1;
//setsockopt(client_socket, SOL_SOCKET, TCP_NODELAY, &chOpt, sizeof(char));
//
int snd_size = PACKET_SEND_BUF * 1024 * 1024;
setsockopt(client_socket, SOL_SOCKET, SO_SNDBUF, (char*)&snd_size, sizeof(snd_size));
//
int packet_num = ui.packet_num->text().toInt();
int packet_num_per_small_cycle = ui.small_cycle->text().toInt();
int packet_number_per_big_cycle = ui.big_cycle->text().toInt();
int expect_speeding = ui.expect_speed->text().toInt();
//
//1.
int big_cycle_number = packet_num / packet_number_per_big_cycle;
if (big_cycle_number * packet_number_per_big_cycle < packet_num)
{
big_cycle_number++;
}
//2. sleep
int small_cycle_number_need_big_sleep = (packet_number_per_big_cycle / packet_num_per_small_cycle) * sleep_rate;
// sleep
int sleep_count = 0;
//3.
DWORD now_time = GetTickCount();
DWORD big_cycle_end_time = GetTickCount();
//
DWORD big_cycle_need_time = (8.0 * packet_length * packet_number_per_big_cycle * 1.0) / (expect_speeding * 1.024 * 1024); //
std::cout << " :" << big_cycle_need_time << " " << std::endl;
// sleep
DWORD sleep_big_cycle = 0; // ms
// ,
DWORD begin_send_time = GetTickCount();
DWORD end_send_time = GetTickCount();
//
DWORD big_cycle_begin_time = GetTickCount();
// UDP
BYTE* packet_send = new BYTE[packet_length];
//
// , 5000
for (int i = 0; i < packet_num; i)
{
//
for (int j = 0; j < packet_num_per_small_cycle; j++)
{
//
EncodePacket(packet_send, i);
i++;
sendto(client_socket, (char *)packet_send, packet_length, 0, (SOCKADDR *)&serveraddr, sizeof(serveraddr));
}
Sleep(1); //
sleep_count++;
//
if (sleep_count == small_cycle_number_need_big_sleep)
{
//sleep_count = 0; // sleep 0
now_time = GetTickCount();
// ms
DWORD temp = (now_time - big_cycle_begin_time);
DWORD needSleepTime = 0;
if (big_cycle_need_time > temp)
{
needSleepTime = big_cycle_need_time - temp;
}
else
{
needSleepTime = 0;
}
if (needSleepTime > 0)
{
Sleep(needSleepTime); //
}
big_cycle_begin_time = GetTickCount();
}
if (sleep_count == packet_number_per_big_cycle / packet_num_per_small_cycle)
{
big_cycle_end_time = GetTickCount();
//DWORD send_speed = 8 * packet_length * packet_num / ((end_send_time - begin_send_time)*1.024*1024); //
double send_speed = (packet_number_per_big_cycle * packet_length * 8.0) / (1.024 * 1024 * (big_cycle_end_time - big_cycle_begin_time));
big_cycle_begin_time = GetTickCount();
sleep_count = 0;
}
}
//
end_send_time = GetTickCount();
//DWORD send_speed = 8 * packet_length * packet_num / ((end_send_time - begin_send_time)*1.024*1024); //
double send_speed = (packet_num * packet_length * 8.0) / (1.024 * 1024 * (end_send_time - begin_send_time));
QString str_x = QString::number(send_speed, 'g', 10);
ui.real_speeding->setText(str_x);
system("pause");
return 0;
}
画面は簡単です: 2はボタンを押して、ピクチャーを表示しますhttps://blog.csdn.net/neigetiantian/article/details/77337620