|
ÃÑ ÆäÀÌÁö ¼ö : 3027
![]()
|
ÇöÀçÀ§Ä¡ : ¹Ì´Ï»çÀÌÆ®>QT>Documents>designer_kdevelop 1 ÇöÀç»óȲ ¹× ÇØ¾ßÇÒ ÀÏ
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ÆÄÀÏÀ» ¸¸µéµµ·Ï ÇÑ´Ù. ![]()
¿©±â¿¡¼ OK ¹öưÀ» Ŭ¸¯ÇÏ¸é ¾Æ·¡¿Í °°Àº AutoMaker Manager âÀÌ ¶á´Ù. ±×³É OK ¹öưÀ» Ŭ¸¯Çϵµ·Ï ÇÏÀÚ. ![]()
ÀÌ·¸°Ô ÇØ¼ designer¿¡¼ »ç¿ëÇÒ caldlg.ui ÆÄÀÏÀ» »ý¼ºÇß´Ù. ÀÌÁ¦ designer·Î .uiÆÄÀÏÀ» ¿¾î¼ GUI¸¦ µðÀÚÀÎ ÇϸéµÈ´Ù. Á÷Àû desinger¸¦ ½ÇÇà½ÃÄѼ ÆÄÀÏÀ» ºÒ·¯¿Íµµ µÇ°í, developÀÇ ¿ÞÂÊ Ã¢ÀÇ File Selector¿¡¼ caldlg.uiÆÄÀÏÀ» ¼±ÅÃÇÑÈÄ designer¸¦ ½ÇÇà ½ÃÄѵµ µÈ´Ù. ![]()
designerÀÇ °£´ÜÇÑ »ç¿ë¹æ¹ýÀº QT ¹®¼¿¡ ÀÖ´Â ³»¿ëÀ» »ìÆìº¸±â ¹Ù¶õ´Ù. 3.3 GUI µðÀÚÀÎ Çϱâ
designer´Â ºñÁê¾óÇÑ GUI Á¦ÀÛ È¯°æÀ» Á¦°øÇÑ´Ù. °³¹ßÀÚ´Â °ñ¸Ó¸® ½âÀÏ ÇÊ¿ä ¾øÀÌ ¸¶¿ì½º¸¦ ÅëÇØ¼ ÇÊ¿äÇÑ À§Á¬À» ¹èÄ¡ÇÏ°í Æ¯¼º(Properties)¸¦ Á¶Á¤ÇÏ´Â Á¤µµ·Î °£´ÜÇÏ°Ô GUI ȸéÀ» ¸¸µé¾î ³¾ ¼ö ÀÖ´Ù.
ÇÊÀÚ°¡ ¸¸µç GUI ȸéÀº ´ÙÀ½°ú °°´Ù. º¼Ç°¾ø´Ù°í ¹¹¶ó ÇÏÁø ¸»ÀÚ. GUI ¸ÚÀÖ°Ô±¸¼ºÇÏ´Â°Ô ¸ñÀûÀº ¾Æ´Ï´Ï.. ![]()
»ç¿ëµÇ´Â À§Á¬Àº 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 °ü¸® âÀ» ¶ß°Ô ÇÑ´Ù. ![]()
ÀÌÁ¦ Name¿¡ Ŭ·¡½º À̸§ÀÎ Calc¸¦ ÀÔ·ÂÇÑ´Ù. ±×·¯¸é File Names¿¡ Çì´õÆÄÀϰú ¼Ò½ºÆÄÀÏÀÇ À̸§ÀÌ ¸¸µé¾îÁú °ÍÀÌ´Ù. ¿ì¸®°¡ ¸¸µé ÇÁ·Î±×·¥Àº QT¸¦ ÀÌ¿ëÇÏ°Ô µÊÀ¸·Î ¹Ýµå½Ã optionsÀÇ Generate QWidget child class¸¦ üũÇϵµ·Ï ÇÏÀÚ. OK ¹öưÀ» ´©¸£¸é Automake Manager âÀÌ ¶á´Ù. ±×³É OK¹öưÀ» ´·¯ÁØ´Ù. ![]()
ÀÌÁ¦ classesÅÇÀ» Ŭ¸¯Çغ¸¸é CalcŬ·¡½º°¡ »ý±ä°É È®ÀÎÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ![]() 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¿¡¼ °¢ À§Á¬¿¡ ´ëÀÀµÇ´Â ½½·Ô ÇÔ¼ö¸¦ µî·Ï ½Ã۵µ·Ï ÇÑ´Ù. ![]()
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 Å×½ºÆ® °á°ú
´ÙÀ½Àº Å×½ºÆ® °á°ú ȸéÀÌ´Ù.
![]() |
|