QT Designer°ú Kdevelop¸¦ ÀÌ¿ëÇÑ GUI ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ß
ÃÑ ÆäÀÌÁö ¼ö : 3027

Àüü ÇÔ¼ö/¿ë¾î»çÀü
ÇöÀçÀ§Ä¡ : ¹Ì´Ï»çÀÌÆ®>QT>Documents>designer_kdevelop

Contents

1 ÇöÀç»óȲ ¹× ÇØ¾ßÇÒ ÀÏ
2 ¼Ò°³
2.1 ¸¸µé°íÀÚ ÇÏ´Â ÇÁ·Î±×·¥
3 kdevelop ¸¦ ÅëÇÑ GUI ÇÁ·Î±×·¥ °³¹ß
3.1 ÇÁ·ÎÁ§Æ® »ý¼º
3.2 GUI ÄÚµå »ý¼º
3.3 GUI µðÀÚÀÎ Çϱâ
3.4 UI¸¦ kdevelop ÇÁ·ÎÁ§Æ®¿¡ µî·Ï ½Ã۱â
3.5 UI¿Í ¼Ò½ºÄÚµåÀÇ ºÐ¸®
3.6 UI ÄÚµå »ý¼º
4 Calc ½ÇÁ¦ ±¸Çö
4.1 designer¸¦ ÀÌ¿ëÇØ¼­ °¡»óÇÔ¼ö µî·ÏÇϱâ
4.2 ÄÚµå ±¸Çö
4.2.1 Åë½ÅÇÒ µ¥ÀÌÅÍ ±¸Á¶Ã¼ Á¤ÀÇ
4.2.2 calc.h
4.2.3 calc.cpp
4.3 Å×½ºÆ® °á°ú


1 ÇöÀç»óȲ ¹× ÇØ¾ßÇÒ ÀÏ

  1. designer¿Í kdevelop(12) ¿¬µ¿¿¡ °üÇÑ ±âÃÊÀûÀÎ ³»¿ë ¿Ï¼º
  2. ¼ÒÄÏ Åë½Å°ú °ü·ÃµÈ ½½·ÔÇÔ¼ö¸¦ Á¦ÀÛÇØ¾ßÇÔ.

2 ¼Ò°³

qt designerÀÌ ÆíÇÑ GUI Á¦ÀÛÅøÀ̱ä ÇÏÁö¸¸ ÅëÇÕ°³¹ß ȯ°æÀ» Áö¿øÇÏÁö ¾Ê´Â °ü°è·Î º»°ÝÀûÀÎ GUI ÇÁ·Î±×·¥À» ÀÛ¼ºÇϰíÀÚ Çϸé ÀÌ·¡ Àú·¡ °É¸®Àû°Å¸®´Â°Ô ¸¹´Ù. ±×·¡¼­ KDEȯ°æÀÇ ÅëÇÕ °³¹ß ȯ°æÀÎ kdevelp¿Í designer¸¦ ÀÌ¿ëÇØ¼­ ÇÁ·Î±×·¥À» ¸¸µé¾î º¸±â·Î Çß´Ù.

ÇÁ·Î±×·¥ÀÇ °³¹ß ¹æÇâÀº ÇÁ·ÎÁ§Æ® °ü¸®¿Í µð¹ö±ë ±â´ÉÀÌ °­·ÂÇÑ kdevelop·Î ´ë·«ÀûÀÎ ÇÁ·ÎÁ§Æ® °³¹ßȯ°æÀ» ¸¸µé°í designer¸¦ ÅëÇØ¼­ GUI¸¦ ¸¸µçÈÄ µÎ °³¸¦ °áÇÕÇÏ´Â ¹æ½ÄÀÌ´Ù. vc++°ú ²Ï ºñ½ÁÇÑ ¹æ½ÄÀÌ´Ù.

2.1 ¸¸µé°íÀÚ ÇÏ´Â ÇÁ·Î±×·¥

¸¸µé ÇÁ·Î±×·¥Àº °è»ê±â ÇÁ·Î±×·¥ÀÌ´Ù. ´ÜÁö »çÄ¢¿¬»ê ¸¸À» ÇÏ´Â °£´ÜÇÑ ÇÁ·Î±×·¥Àε¥, ´Ù¾ç¼ºÀ» Å×½ºÆ® Çϱâ À§Çؼ­ ¼­¹ö/Ŭ¶óÀÌ¾ðÆ® ¸ðµ¨·Î ¸¸µé±â·Î Çß´Ù. Ŭ¶óÀÌ¾ðÆ®¿¡¼­ GUI¸¦ ÅëÇØ¼­ ¿¬»êÀÚ¿Í ÇÇ¿¬»êÀÚ¸¦ ÀÔ·ÂÇÑ ÈÄ ¹öưÀ» ´©¸£¸é ¼ÒÄÏÀ» ÅëÇØ¼­ ¼­¹ö·Î Àü¼ÛµÇ°í ¼­¹ö¿¡¼­ ÀÌ¿¡ ´ëÇÑ °ªÀ» º¸³»¿À´Â ¹æ½ÄÀÌ´Ù.

¼­¹ö ÇÁ·Î±×·¥Àº ÀϹÝÀûÀÎ ¼ÒÄÏ ÇÁ·Î±×·¥ÀÌ´Ù. ´ÙÀ½Àº À̹ø ÇÁ·ÎÁ§Æ®¸¦ À§Çؼ­ »ç¿ëÇÒ ¼­¹ö ÇÁ·Î±×·¥ ¿¹Á¦´Ù.
#include <netdb.h> 
#include <netinet/in.h> 
#include <arpa/inet.h> 
#include <sys/socket.h> 
#include <unistd.h> 
#include <stdio.h> 
 
#define SA   struct sockaddr 
struct cal 
{ 
    int  numa; 
    int  numb; 
    char op; 
    int result; 
    int error; 
}; 
 
// ³×Æ®¿öÅ©¸¦ ÅëÇØ¼­ ÀоîµéÀÎ cal ±¸Á¶Ã¼¸¦   
// È£½ºÆ® ¹ÙÀÌÆ® ¼ø¼­¿¡ ¸Âµµ·Ï º¯°æÇÑ´Ù.  
void H2N(struct cal *acal) 
{ 
    acal->numa  = htonl(acal->numa); 
    acal->numb  = htonl(acal->numb); 
    acal->result = htonl(acal->result); 
    acal->error = htonl(acal->error); 
} 
 
// write(2)¸¦ ÅëÇØ¼­ ÀÎÅͳÝÀ¸·Î º¸³¾ ¶§  
// ³×Æ®¿öÅ© ¹ÙÀÌÆ® ¼ø¼­¿¡ ¸Âµµ·Ï º¯È¯ÇÑ´Ù.  
void N2H(struct cal *acal) 
{ 
    acal->numa  = ntohl(acal->numa); 
    acal->numb  = ntohl(acal->numb); 
    acal->result = ntohl(acal->result); 
    acal->error = ntohl(acal->error); 
} 
 
int main(int argc, char **argv) 
{ 
    int client_sockfd, server_sockfd; 
    int clilen; 
    struct sockaddr_in clientaddr, serveraddr; 
    struct cal mycal; 
 
    // µè±â ¼ÒÄÏÀ» »ý¼ºÇÑ´Ù. 
    server_sockfd = socket(AF_INET, SOCK_STREAM, 0); 
 
    // TCPÇÁ·ÎÅäÄÝÀ» ÀÌ¿ëÇÏ¸ç Æ÷Æ®¹øÈ£ 8085·Î 
    // ¿¬°áÀ» ±â´Ù¸®µµ·Ï ¼ÒÄÏÀ» ¼³Á¤ÇÑ´Ù. 
    serveraddr.sin_family = AF_INET; 
    serveraddr.sin_addr.s_addr = htonl(INADDR_ANY); 
    serveraddr.sin_port = htons(8085); 
    if (bind(server_sockfd, (SA *)&serveraddr, sizeof(serveraddr)) < 0) 
    { 
        perror("bind error :"); 
        return 1; 
    } 
 
    // ¼ÒÄÏ ¿¬°á ´ë±â¿­À» ÀÛ¼ºÇÑ´Ù. 
    if (listen(server_sockfd,5) == -1) 
    { 
        perror("listen error :"); 
        return 1; 
    } 
 
    // Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°áÀ» ¹Þ¾Æµé¿©¼­ 󸮸¦ ÇÏ´Â ÁÖ¿ä ÄÚµåºÎºÐ  
    while(1) 
    { 
        clilen = sizeof(clientaddr); 
        // ¼ÒÄÏ ¿¬°á ´ë±â¿­¿¡ ¿¬°áÀÌ ÀÖ´ÂÁö °Ë»çÇØ¼­  
        // ¿¬°áÀÌ ÀÖ´Ù¸é ¿¬°á ¼ÒÄÏÀ» ¸®ÅÏÇÑ´Ù.  
        printf("Accept\n");     
        if ((client_sockfd = accept(server_sockfd, (SA *)&clientaddr, &clilen)) < 0) 
        { 
            perror("accept error : "); 
            close(client_sockfd); 
            continue; 
        } 
        printf("OK\n");     
        // Ŭ¶óÀÌ¾ðÆ®·Î ºÎÅÍ µ¥ÀÌÅ͸¦ Àоîµé¿©¼­ ¿¬»êÀ» ÇÑ´Ù. 
        while(1) 
        { 
            if (read(client_sockfd, (void *)&mycal, sizeof(mycal)) <= 0) 
            { 
                 close(client_sockfd); 
                break; 
            } 
            N2H(&mycal); 
               switch(mycal.op) 
               { 
                 case '+': 
                     mycal.result = mycal.numa + mycal.numb; 
                     mycal.error  = 0; 
                     break; 
                 case '-': 
                     mycal.result = mycal.numa - mycal.numb; 
                     mycal.error  = 0; 
                     break; 
                 case '/': 
                     mycal.result = mycal.numa / mycal.numb; 
                     mycal.error  = 0; 
                     break; 
                 case '*': 
                     mycal.result = mycal.numa * mycal.numb; 
                     mycal.error  = 0; 
                     break; 
                // Ŭ¶óÀÌ¾ðÆ®·Î ºÎÅÍ 'e'°¡ Àü¼ÛµÇ¸é ¿¬°áÀ» Á¾·áÇÑ´Ù. 
                 case 'e':     
                     close(client_sockfd); 
                    break; 
            } 
            if (mycal.op == 'e') 
            { 
                break; 
            } 
            // µð¹ö±ë¿ë 
               printf("%d %c %d = %d\n",mycal.numa, mycal.op,  
                        mycal.numb, mycal.result);  
            // ¿¬»ê°á°ú¸¦ ´Ù½Ã Ŭ¶óÀÌ¾ðÆ®¿¡ Àü¼ÛÇÑ´Ù. 
            H2N(&mycal); 
               write(client_sockfd, (void *)&mycal, sizeof(mycal)); 
        } 
    } 
} 
 

ÄÚµå´Â °£´ÜÇÏ´Ù. Ŭ¶óÀÌ¾ðÆ®·Î ºÎÅÍ ¹ÞÀº cal±¸Á¶Ã¼ÀÇ numa¿Í numb¸¦ ¿¬»êÀÚ op¸¦ ÅëÇØ¼­ ¿¬»êÇÑÈÄ °á°ú°ªÀ» result¿¡ Àû¾îµµ ±×´ë·Î Ŭ¶óÀÌ¾ðÆ®·Î Àü¼ÛÇÑ´Ù.

3 kdevelop ¸¦ ÅëÇÑ GUI ÇÁ·Î±×·¥ °³¹ß

3.1 ÇÁ·ÎÁ§Æ® »ý¼º

ÀÏ´Ü kdevelop ÇÁ·ÎÁ§Æ®¸¦ »ý¼ºÇÑ´Ù. ÇÁ·ÎÁ§Æ®ÀÇ À̸§Àº calc·Î ÇϰڴÙ. ÇÁ·ÎÁ§Æ® »ý¼º½Ã ¿©·¯°³ÀÇ ÁغñµÈ ÅÛÇø´ Áß C++> KDE > Simple KDE ApplicationÀ» ¼±ÅÃÇϵµ·Ï ÇÏÀÚ. ÇÁ·ÎÁ§Æ® À̸§À» ÀÔ·ÂÇÑ ÈÄ ¸î¹øÀÇ Next ¹öư Ŭ¸¯À¸·Î ÇÁ·ÎÁ§Æ®°¡ »ý¼ºµÈ´Ù.

3.2 GUI ÄÚµå »ý¼º

ÀÌÁ¦ GUIÈ­¸éÀ» ¸¸µéÂ÷·Ê´Ù. File > New FileÀ» Ŭ¸¯ÇÏ¸é ´ÙÀ½°ú °°ÀÌ ÆÄÀÏÀÇ Å¸ÀÔÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ´Â ÆÄÀÏ »ý¼ºÃ¢ÀÌ ¶ß°Ô µÇ´Âµ¥, GUI µðÀÚÀÎÀ» À§ÇØ »ç¿ëµÇ´Â designer´Â .ui ÆÄÀÏÀ» »ç¿ëÇÔÀ¸·Î ¾Æ·¡¿Í °°ÀÌ GUIÆÄÀÏÀ» ¸¸µéµµ·Ï ÇÑ´Ù.

http://www.joinc.co.kr/albums/album01/akm.png

¿©±â¿¡¼­ OK ¹öưÀ» Ŭ¸¯ÇÏ¸é ¾Æ·¡¿Í °°Àº AutoMaker Manager âÀÌ ¶á´Ù. ±×³É OK ¹öưÀ» Ŭ¸¯Çϵµ·Ï ÇÏÀÚ.

http://www.joinc.co.kr/albums/album01/akn.png

ÀÌ·¸°Ô ÇØ¼­ designer¿¡¼­ »ç¿ëÇÒ caldlg.ui ÆÄÀÏÀ» »ý¼ºÇß´Ù. ÀÌÁ¦ designer·Î .uiÆÄÀÏÀ» ¿­¾î¼­ GUI¸¦ µðÀÚÀÎ ÇϸéµÈ´Ù. Á÷Àû desinger¸¦ ½ÇÇà½ÃÄѼ­ ÆÄÀÏÀ» ºÒ·¯¿Íµµ µÇ°í, developÀÇ ¿ÞÂÊ Ã¢ÀÇ File Selector¿¡¼­ caldlg.uiÆÄÀÏÀ» ¼±ÅÃÇÑÈÄ designer¸¦ ½ÇÇà ½ÃÄѵµ µÈ´Ù.

http://www.joinc.co.kr/albums/album01/ako.sized.png

designerÀÇ °£´ÜÇÑ »ç¿ë¹æ¹ýÀº QT ¹®¼­¿¡ ÀÖ´Â ³»¿ëÀ» »ìÆìº¸±â ¹Ù¶õ´Ù.

3.3 GUI µðÀÚÀÎ Çϱâ

designer´Â ºñÁê¾óÇÑ GUI Á¦ÀÛ È¯°æÀ» Á¦°øÇÑ´Ù. °³¹ßÀÚ´Â °ñ¸Ó¸® ½âÀÏ ÇÊ¿ä ¾øÀÌ ¸¶¿ì½º¸¦ ÅëÇØ¼­ ÇÊ¿äÇÑ À§Á¬À» ¹èÄ¡ÇÏ°í Æ¯¼º(Properties)¸¦ Á¶Á¤ÇÏ´Â Á¤µµ·Î °£´ÜÇÏ°Ô GUI È­¸éÀ» ¸¸µé¾î ³¾ ¼ö ÀÖ´Ù.

ÇÊÀÚ°¡ ¸¸µç GUI È­¸éÀº ´ÙÀ½°ú °°´Ù. º¼Ç°¾ø´Ù°í ¹¹¶ó ÇÏÁø ¸»ÀÚ. GUI ¸ÚÀÖ°Ô±¸¼ºÇÏ´Â°Ô ¸ñÀûÀº ¾Æ´Ï´Ï..

http://www.joinc.co.kr/albums/album01/akp.png

»ç¿ëµÇ´Â À§Á¬Àº QPushButton, QLineEdit, QLabel, QCombBox¿Í À§Á¬ ¹èÄ¡¸¦ À§ÇÑ QFrame, QGroupBox´Ù. ¿ä·É²¯ À§Á¬À» ¹èÄ¡½ÃŰ±â ¹Ù¶õ´Ù. Âü°í·Î °¢ À§Á¬ÀÇ propertise´Â ³ªÁß¿¡ ÇÁ·Î±×·¥¿¡¼­ È£ÃâµÇ´Â À̸§À̱⵵ ÇÔÀ¸·Î À§Á¬ Ư¼º¿¡ ¸Âµµ·Ï ÀÛ¸íÇϱ⠹ٶõ´Ù.

°¢ À§Á¬ÀÇ À̸§Àº ¸¶À½´ë·Î Á¤Ç쵂 ¸ÞÀÎâÀÇ À̸§Àº FormCalc·Î ÇÏÀÚ. ¸ÞÀÎâÀÇ À̸§Àº ³ªÁß¿¡ UI Ŭ·¡½ºÀÇ À̸§À¸·Î »ç¿ëµÈ´Ù. ÀÌÈÄ ¸ðµç ¼³¸íÀº ¸ÞÀÎâÀÇ À̸§ÀÌ FormCalc·Î µÇ¾ú´Ù´Â °¡Á¤ÇÏ¿¡ ÀÌ·ç¾îÁöµµ·Ï ÇϰڴÙ.

designer »ç¿ë¹æ¹ý¿¡ µû¸¥ ÀÚ¼¼ÇÑ ¼³¸íÀº ÇÏÁö ¾Ê°Ú´Ù. ¿Ï¼º½ÃÄ×´Ù¸é ÀúÀå½ÃŰ±â ¹Ù¶õ´Ù.

3.4 UI¸¦ kdevelop ÇÁ·ÎÁ§Æ®¿¡ µî·Ï ½Ã۱â

kdevelop¸¦ ÀÌ¿ëÇÏ´Â ¸ñÀûÀº Ŭ·¡½º,ÇÔ¼ö,Çì´õÆÄÀÏ,¼Ò½ºÆÄÀÏ,µð¹ö±ëÀ» ÅëÇÕÀûÀ¸·Î °ü¸®ÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ÀÌ·¯ÇÑ ÀåÁ¡À» »ç¿ëÇϱâ À§Çؼ­´Â ¿ì¸®°¡ ¸¸µé¾îµÐ UI¸¦ kdevelopÇÁ·ÎÁ§Æ®¿¡ ÅëÇÕ½Ãų Çʿ䰡 ÀÖ´Ù.

ÇÁ·ÎÁ§Æ®·ÎÀÇ ÅëÇÕÀº Ŭ·¡½º¸¦ µî·ÏÇÔÀ¸·Î¼­ ÀÌ·ç¾îÁø´Ù. µî·Ï ½Ãų Ŭ·¡½ºÀÇ À̸§Àº Cal·Î ÇϰڴÙ. ±×·±µ¥ Calc Ŭ·¡½º´Â calcÇÁ·ÎÁ§Æ®¸¦ »ý¼º½ÃŰ¸é¼­ ÀÌ¹Ì »ý¼ºÀÌ µÈ »óÅ´Ù. ±×·¯¹Ç·Î ±âÁ¸ÀÇ Calc Ŭ·¡½º¸¦ Æ÷ÇÔÇÑ calc.cpp, calc.h¸¦ »èÁ¦ ½ÃŰ°í »õ·Î ¸¸µéµµ·Ï ÇϰڴÙ. - ¹°·Ð ÀüÇô ´Ù¸¥ À̸§ÀÇ Å¬·¡½º¸¦ ¸¸µé¾îµµ µÇ°í, ±âÁ¸ÀÇ Å¬·¡½º¸¦ UI Ŭ·¡½ºÀÎ FormCalc·Î ºÎÅÍ »ó¼ÓµÇµµ·Ï ¼öÁ¤Çصµ µÇÁö¸¸ ÀÏ´ÜÀº ¼ÓÆíÇÏ°Ô ÀÌ·¸°Ô ÇÑ´Ù. -

¾µµ¥¾ø´Â ÆÄÀϵéÀ» Áö¿ü´Ù¸é ÇÁ·ÎÁ§Æ®¸¦ ´Ù½Ã ¿­¾î¼­(open) º¯°æ»çÇ×ÀÌ Àû¿ëµÇµµ·Ï ÇÑ´Ù. ±×´ÙÀ½ Project > New Class¸¦ ÀÌ¿ëÇØ¼­ Class °ü¸® âÀ» ¶ß°Ô ÇÑ´Ù.

http://www.joinc.co.kr/albums/album01/akq.sized.png

ÀÌÁ¦ Name¿¡ Ŭ·¡½º À̸§ÀÎ Calc¸¦ ÀÔ·ÂÇÑ´Ù. ±×·¯¸é File Names¿¡ Çì´õÆÄÀϰú ¼Ò½ºÆÄÀÏÀÇ À̸§ÀÌ ¸¸µé¾îÁú °ÍÀÌ´Ù. ¿ì¸®°¡ ¸¸µé ÇÁ·Î±×·¥Àº QT¸¦ ÀÌ¿ëÇÏ°Ô µÊÀ¸·Î ¹Ýµå½Ã optionsÀÇ Generate QWidget child class¸¦ üũÇϵµ·Ï ÇÏÀÚ. OK ¹öưÀ» ´©¸£¸é Automake Manager âÀÌ ¶á´Ù. ±×³É OK¹öưÀ» ´­·¯ÁØ´Ù.

http://www.joinc.co.kr/albums/album01/akr.png

ÀÌÁ¦ classesÅÇÀ» Ŭ¸¯Çغ¸¸é CalcŬ·¡½º°¡ »ý±ä°É È®ÀÎÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

http://www.joinc.co.kr/albums/album01/aks.png


3.5 UI¿Í ¼Ò½ºÄÚµåÀÇ ºÐ¸®

´ç¿¬ÇÏÁö¸¸ °¡´ÉÇÑ UI¿Í ¼Ò½ºÄÚµå´Â ºÐ¸®µÇ´Â°Ô Á»´õ ÆíÇÑ °³¹ßȯ°æÀ» ¸¸µå´Âµ¥
µµ¿òÀ» ÁØ´Ù. UI¿ÍÀÇ ¿ÏÀüÇÑ ºÐ¸®¸¦ À§Çؼ­ ¸ðµç ½½·ÔÇÔ¼ö¿Í ±âŸ ÇÔ¼öµéÀº ¼ø¼ö °¡»óÇÔ¼öÈ­ Çϵµ·Ï ÇÒ°ÍÀÌ´Ù. ½ÇÁ¦ ±¸ÇöÀº FormCalc·Î ºÎÅÍ »ó¼ÓµÇ´Â CalcŬ·¡½º¸¦ ÅëÇØ¼­ ±¸ÇöÇÒ °ÍÀÌ´Ù.

¹°·Ð ±»ÀÌ °¡»óÇÔ¼ö¸¦ µî·ÏÇÒ ÇÊ¿ä ¾øÀÌ Calc¿¡¼­ »ó¼Ó¹ÞÀº FormCalc À§Á¬ÀÇ ½½·ÔÇÔ¼ö¿Í ½Ã±×³ÎÀ» ±×´ë·Î ÀÌ¿ëÇØµµ µÈ´Ù. À̰ÍÀº ±âÈ£ÀÇ Â÷ÀÌÀÌ´Ï ÃëÇâ¿¡ µû¶ó¼­ ¼±ÅÃÇϵµ·Ï ÇÑ´Ù. ¾î¶µç ¿©±â¿¡¼­´Â °¡»óÇÔ¼ö¸¦ »ç¿ëÇϵµ·Ï ÇϰڴÙ.

3.6 UI ÄÚµå »ý¼º

ÀÌÁ¦ .ui ÆÄÀÏ·Î ºÎÅÍ ½ÇÁ¦ Äڵ带 »ý¼ºÇØ ³»¾ßÇÒ ½Ã°£ÀÌ´Ù. .ui·Î ºÎÅÍ Äڵ带
¸¸µé¾î ³»±â À§Çؼ­ qt´Â uic (User Interface Compiler)¶ó´Â ÇÁ·Î±×·¥À» Á¦°øÇÑ´Ù.
ÀÌ ÇÁ·Î±×·¥À» ÀÌ¿ëÇØ¼­ ´ÙÀ½°ú °°ÀÌ Çì´õÆÄÀϰú ¼Ò½ºÄÚµå ÆÄÀÏÀ» »ý¼ºÇÒ ¼ö ÀÖ´Ù.
uic -o cacdlg.h cacdlg.ui 
uic -o cacdlg.cpp -i cacdlg.h cacdlg.ui 
 

±×·³ designer¸¦ ÅëÇØ¼­ ui¸¦ º¯°æÇÒ¶§ ¸¶´Ù. uic¸¦ ÀÌ¿ëÇØ¼­ Äڵ带 ¸¸µé¾î³»Áà¾ß ÇÏ´ÂÁö ¶ó´Â Àǹ®ÀÌ »ý±æ ¼ö ÀÖÀ» °Í °°Àºµ¥, °ÆÁ¤ÇÏÁö ¸»±â ¹Ù¶õ´Ù. kdevelop´Â MakefileÀ» ÅëÇØ¼­ .uiÆÄÀϱîÁö ÀÚµ¿À¸·Î °ü¸®ÇÑ´Ù. ¸¸¾à .uiÆÄÀÏÀÌ ¼öÁ¤µÇ¾ú´Ù¸é ÀÚµ¿ÀûÀ¸·Î uic¸¦ ½ÇÇà½ÃÄѼ­ Äڵ带 ¸¸µé¾î ³»°Ô µÈ´Ù.

4 Calc ½ÇÁ¦ ±¸Çö

ÀÌÁ¦ ¼ÒÄÏ ¿¬°á, ¼ÒÄÏ Á¾·á, µ¥ÀÌÅÍ ¼Û/¼ö½Å°ú °ü·ÃµÈ ¸ðµç ÁÖ¿ä
¸Þ¼­µåµéÀ» ¿Ï¼º½Ã۵µ·Ï ÇÏÀÚ.

4.1 designer¸¦ ÀÌ¿ëÇØ¼­ °¡»óÇÔ¼ö µî·ÏÇϱâ

ÀÌµé ¸Þ¼­µåµéÀº UIÈ­¸é¿¡¼­ °¢ À§Á¬¿ä¼Ò¸¦ Ŭ¸¯ÇÒ ¶§ ¹ß»ýÇÏ´Â ¸Þ¼­µåµé ÀÓÀ¸·Î
FormCalc¿¡ ¼ø¼ö °¡»óÇÔ¼ö(½½·Ô ÇÔ¼ö)·Î µî·Ï ½Ã۰í, ½ÇÁ¦ ±¸ÇöÀº Calc¿¡¼­
ÀÌ·ç¾îÁú °ÍÀÌ´Ù. ´ÙÀ½°ú °°ÀÌ designer¿¡¼­ °¢ À§Á¬¿¡ ´ëÀÀµÇ´Â ½½·Ô ÇÔ¼ö¸¦ µî·Ï
½Ã۵µ·Ï ÇÑ´Ù.

http://www.joinc.co.kr/albums/album01/akt.png

  1. ButtonExit : ÇÁ·Î±×·¥ Á¾·á (´Ý±â)
  2. PushConnect : ¼ÒÄÏ ¿¬°á ¹öư (¿¬°á)
  3. PushSend : µ¥ÀÌÅÍ Àü¼Û ¹öư (Àü¼Û)
  4. PushClose : ¼ÒÄÏ ¿¬°á Á¾·á ¹öư (Á¾·á)

4.2 ÄÚµå ±¸Çö

ÀÌÁ¦ ½ÇÁ¦·Î CalcÀÇ ¸Þ¼­µåµéÀ» Á¤ÀÇÇØº¸µµ·Ï ÇÏÀÚ. ¿©±â¿¡¼­´Â FormCalc·Î ºÎÅÍ
»ó¼ÓµÈ °¡»óÇÔ¼ö¿Í ÀÚüÀûÀ¸·Î »ç¿ëµÉ ½½·Ô ¸Þ¼­µåµé¿¡ ´ëÇÑ Á¤ÀǸ¦ ¼³¸íÇÑ´Ù.

Áß°£ Áß°£¿¡ ¸â¹öº¯¼öµéµµ »ç¿ëµÉ °Çµ¥, À̰͵éÀº °¢ÀÚ CalcŬ·¡½º¿¡ ¼±¾ðÇØ¼­
»ç¿ëÇϱ⠹ٶõ´Ù.

4.2.1 Åë½ÅÇÒ µ¥ÀÌÅÍ ±¸Á¶Ã¼ Á¤ÀÇ
¸ÕÀú Åë½Å¿¡ »ç¿ëÇÒ µ¥ÀÌÅÍ ±¸Á¶Ã¼¸¦ Á¤ÀÇ ÇÑ´Ù. ¼­¹öÃø°ú µ¿ÀÏÇÏ´Ù.
struct cal 
{ 
    int numa; 
    int numb; 
    char op; 
    int result; 
    int error; 
    void H2N() 
    { 
        numa = htonl(numa); 
        numb = htonl(numb); 
        result = htonl(result); 
        error = htonl(error); 
    } 
    void N2H() 
    { 
        numa = ntohl(numa); 
        numb = ntohl(numb); 
        result = ntohl(result); 
        error = ntohl(error); 
    } 
}; 
 

4.2.2 calc.h
CalcŬ·¡½º¸¦ QWidget°¡ ¾Æ´Ñ FormCalc·Î ºÎÅÍ »ó¼ÓµÇµµ·Ï ¾à°£ ¼öÁ¤ÇÑ´Ù.
#ifndef CALC_H 
#define CALC_H 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <sys/stat.h> 
#include <unistd.h> 
#include <arpa/inet.h> 
#include <qwidget.h> 
#include <qsocket.h> 
 
#include "caldlg.h" 
 
/** 
@author root 
*/ 
struct cal 
{ 
    int numa; 
    int numb; 
    char op; 
    int result; 
    int error; 
    void H2N() 
    { 
        numa = htonl(numa); 
        numb = htonl(numb); 
        result = htonl(result); 
        error = htonl(error); 
    } 
    void N2H() 
    { 
        numa = ntohl(numa); 
        numb = ntohl(numb); 
        result = ntohl(result); 
        error = ntohl(error); 
    } 
}; 
 
class Calc : public FormCalc 
{ 
Q_OBJECT 
 
public: 
    QSocket *socket; 
    Calc(QWidget *parent = 0, const char *name = 0); 
    void Test(); 
    ~Calc(); 
 
public slots: 
    virtual int Connection(); 
    virtual void Close(); 
    void socketError(int); 
    void Send(); 
    void socketConnected(); 
    void socketRead(); 
    void sockClose(); 
 
private slots: 
 
private: 
    struct cal mycal; 
    int is_connect; 
 
}; 
#endif 
 

4.2.3 calc.cpp
¼Ò½º´Â ÀÌÇØÇϴµ¥ Å« ¾î·Á¿òÀÌ ¾øÀ» °ÍÀÌ´Ù. ¼Ò½º´Â ¼¼¼¼ÇÑ ¿¡·¯Ã³¸®¹× È¿À²¼ºÀº °í·ÁÇÏÁö ¾Ê¾Ò´Ù.
#include "calc.h" 
#include "calc.moc" 
 
#include <iostream> 
#include <string> 
 
#include <qmessagebox.h> 
#include <qlineedit.h> 
#include <qstring.h> 
#include <qcombobox.h> 
#include <qlabel.h> 
 
#include <stdlib.h> 
#include <netinet/in.h> 
 
#include <errno.h> 
#include <string.h> 
 
 
using namespace std; 
 
// »ý¼ºÀÚ 
// is_connect´Â ÇöÀç ¿¬°áÁßÀÎÁö¸¦ È®Àοë 
Calc::Calc(QWidget *parent, const char *name) 
 : FormCalc(parent, name) 
{ 
    is_connect = 0; 
} 
 
Calc::~Calc() 
{ 
} 
 
/*! 
  ¼ÒÄÏ¿¡ ¿¡·¯°¡ ¹ß»ýÇßÀ» °æ¿ì ½ÇÇàµÉ ½½·Ô ÇÔ¼ö      
  ¸Þ½ÃÁö ¹Ú½º¸¦ ÅëÇØ¼­ ¿¡·¯¸¦ Å뺸ÇÏÁö¸¸ ¿¡·¯ Á¾·ù±îÁö´Â Å뺸ÇÏÁö ¾Ê´Â´Ù. 
  ¼öÁ¤Çغ¸ÀÚ.     
 */ 
void Calc::socketError(int e) 
{ 
    QMessageBox::warning(this, "Connection Error ", "Sorry", "Close"); 
    /// @todo implement me 
} 
 
/* 
 Close ¹öưÀ» ´­·¶À» °æ¿ì op¸â¹ö¿¡ Á¾·á¸¦ ¾Ë·ÁÁÖ´Â 'e'°¡ ¼³Á¤µÈ ÈÄ   
 Àü¼ÛµÈ´Ù. 
*/ 
void Calc::Close() 
{ 
    if (is_connect) 
    { 
        mycal.op = 'e'; 
        mycal.H2N(); 
        socket->readBlock((char *)&mycal,  sizeof(mycal)); 
        socket->close(); 
    } 
    close(); 
} 
 
/*! 
  ¼ÒÄÏ ¿¬°áÇÔ¼ö 
 */ 
int Calc::Connection() 
{ 
    QString Buf; 
    socket = new QSocket(this); 
 
    // error, ¿¬°á, ÀÐÀ» µ¥ÀÌÅͰ¡ ¹ß»ýÇßÀ» ¶§ÀÇ ½½·ÔÇÔ¼ö µî·Ï 
    connect(socket, SIGNAL(error(int)), SLOT(socketError(int))); 
    connect(socket, SIGNAL(connected()), SLOT(socketConnected())); 
    connect(socket, SIGNAL(readyRead()), SLOT(socketRead())); 
    socket->connectToHost(LineIP->text(),  atoi(LinePort->text().ascii())); 
    /// @todo implement me 
} 
 
/*! 
    Àü¼Û ¹öưÀ» ´­·¶À» °æ¿ì ½ÇÇàµÇ´Â ÇÔ¼ö  
 */ 
void Calc::Send() 
{ 
    QString Buf; 
    if (is_connect) 
    { 
        Buf = EditNuma->text() + " : " + EditNumb->text(); 
 
        mycal.numa = atoi(EditNuma->text().ascii()); 
        mycal.numb = atoi(EditNumb->text().ascii()); 
        mycal.op = *(comboBox1->currentText().ascii()); 
        mycal.H2N(); 
 
        socket->writeBlock((char *)&mycal, sizeof(mycal)); 
    } 
    else 
    { 
        QMessageBox::warning(this, "Send error", "Socket is no open", "Close"); 
    } 
    /// @todo implement me 
} 
 
 
/*! 
   ¼ÒÄÏÀÌ ¿¬°áµÇ¾úÀ» °æ¿ì ½ÇÇàµÇ´Â ½½·ÔÇÔ¼ö·Î 
   ¸Þ½ÃÁö ¹Ú½º·Î ¿¬°á¼º°øÇßÀ½À» ¾Ë·ÁÁØ´Ù. 
 */ 
void Calc::socketConnected() 
{ 
    QMessageBox::warning(this, "Connect", "Sucess", "Close"); 
    is_connect = 1; 
    /// @todo implement me 
} 
 
 
/*! 
   ¼­¹ö·Î ºÎÅÍ µ¥ÀÌÅ͸¦ ÀоîµéÀδÙ. 
 */  
void Calc::socketRead() 
{ 
    char result[16]; 
    socket->readBlock((char *)&mycal,  sizeof(mycal)); 
    mycal.N2H(); 
    sprintf(result,"%d", mycal.result); 
    // °á°ú textlabel¿¡ °ªÀ» ¼³Á¤ÇÑ´Ù. 
    textLabel2->setText(result); 
    /// @todo implement me 
} 
     
     
/*!  
  Á¾·á ¹öưÀ» ´­·µÀ» °æ¿ì ¼ÒÄÏ ¿¬°áÀ» ´Ý´Â´Ù.  
 */ 
void Calc::sockClose() 
{ 
    if(is_connect) 
    { 
        QMessageBox::warning(this, "socket close", "Sucess", "Close"); 
        is_connect = 0; 
        socket->close(); 
    } 
    else 
    { 
        QMessageBox::warning(this, "close failure", "Socket Not connected", 
          "Close"); 
    } 
    /// @todo implement me 
}    
 

4.3 Å×½ºÆ® °á°ú

´ÙÀ½Àº Å×½ºÆ® °á°ú È­¸éÀÌ´Ù.

http://www.joinc.co.kr/albums/album01/aku.png