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:」を付けないと機能しないことを忘れないでください.Qt + vs 2017 入门与教程_第1张图片
  • 私のVS 2017ではuiが自動的に生成されていません.xxx.hファイル、このファイルはdebugディレクトリの下で、自動的に生成されていない場合は、debugディレクトリの下で変更
  • を表示する必要があります.
    私の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; }

    画面は簡単です:Qt + vs 2017 入门与教程_第2张图片 2はボタンを押して、ピクチャーを表示しますhttps://blog.csdn.net/neigetiantian/article/details/77337620