ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.
qt whitepaperÀÇ ¹ø¿ª ¹®¼´Ù.1 ¼Ò°³
QT´Â ¸ÖƼ Ç÷§Æû GUI¿Í ¾ÖÇø®ÄÉÀÌ¼Ç Á¦ÀÛÀ» À§ÇØ °³¹ßµÇ¾îÁø ŸŶ ¶óÀ̺귯¸®·Î trolltech¿¡¼ °³¹ßÁßÀÎ ¶óÀ̺귯¸®´Ù. QT´Â C++ Ŭ·¡½º ¶óÀ̺귯¸® ÇüÅ·ΠÁ¦À۵Ǿî ÀÖÀ¸¸ç, ºü¸£°í Á÷°üÀûÀÎ ¾ÖÇø®ÄÉÀÌ¼Ç Á¦ÀÛÀÌ °¡´ÉÇϵµ·Ï µµ¿ÍÁØ´Ù. ¶ÇÇÑ QT´Â ¸ÖƼ Ç÷§ÆûÀ» Áö¿øÇÏ´Â °Í ¿Ü¿¡µµ ±¹Á¦È¸¦ Áö¿øÇϰí ÀÖÀ¸¸ç À̸¦ ÀÌ¿ëÇØ¼ ³ÐÀº ½ÃÀå¿¡¼ »ç¿ë°¡´ÉÇÑ ¾ÖÇø®ÄÉÀ̼ÇÀÇ Á¦ÀÛÀÌ °¡´ÉÇØ Áø´Ù.
QT C++ ŸŶÀº 1995³â ºÎÅÍ ¿©·¯°¡Áö »ó¿ë ¾ÖÇø®ÄÉÀ̼ÇÀÇ Á¦ÀÛÀ§ÇØ »ç¿ëµÇ¾îÁ³´Ù. AT&A, IBM, NASA, Xerox¿Í °°Àº Ä¿´Ù¶õ ±Ô¸ðÀÇ È¸»ç¿Í ¿¬±¸¼Ò¿¡¼ ºÎÅÍ ´Ù¸¥ ¸¹Àº ÀÛÀº ȸ»ç¿Í ±â°üµé¿¡¼µµ »ç¿ëµÇ¾îÁö°í ÀÖ´Ù. QT´Â 3.1¹öÁ¯ÀÌ À̸£·¯¼ ´õ¿í´õ ½±¿öÁö°í °·ÂÇØ Á³´Ù. QTÀÇ Å¬·¡½º´Â °³¹ßÀÚ·Î ÇÏ¿©±Ý ºü¸¥½Ã°£¿¡ ÇнÀ°¡´ÉÇÑ °ß°íÇÑ ÀÎÅÍÆäÀ̽º¸¦ Áö¿øÇÏ¸ç °³¹ß½Ã°£À» ´ÜÃà ½ÃÄÑÁØ´Ù. QT´Â ¿ÏÀüÈ÷ °´Ã¼ÁöÇâÀûÀ¸·Î °³¹ßµÇ¾î Áö°í ÀÖ´Ù.
ÀÌ whitepaperÀº QTÇÔ¼ö¿Í ±â¼ú¿¡ ´ëÇÑ °³·«ÀúÀÎ ¼Ò°³¸¦ À§Çؼ ÀÛ¼ºµÇ¾îÁ³´Ù. óÀ½ ¸î°³ÀÇ ÀåÀº ±â¼úÀûÀÌÁö ¾ÊÀº ¼Ò°³¿¡ °ü·ÃµÈ ³»¿ëÀ» ´ã°í ÀÖÀ¸¸ç, ÀåÀÌ ´õÇØÁú ¼ö·Ï ±íÀº ±â¼úÀûÀÎ ³»¿ëµé¿¡ ´ëÇØ¼ ¼³¸íÇϰí ÀÖ´Ù. 2 Executive Summary
QT´Â Ç¥ÁØÀûÀÎ GUIȯ°æÀÇ Áö¿øÀ» À§ÇÑ ¿ÏÀüÇÑ À§Á¬(Widget)À» Æ÷Çϰí ÀÖ´Ù. QT´Â signal°ú slots¶ó´Â Çõ½ÅÀûÀÎ ³»ºÎ °´Ã¼°£ Åë½ÅÀ» À§ÇÑ µµ±¸¸¦ Áö¿øÇϰí ÀÖÀ¸¸ç, À̰ÍÀº ±âÁ¸ÀÇ ¿À·¡µÇ°í ºÒ¾ÈÀüÇÑ callback ±â¼úÀ» ´ëüÇϰí ÀÖ´Ù. QT´Â ¸¶¿ì½ºÅ¬¸¯°ú ŰÀԷµîÀ» Á¦¾îÇϱâ À§Çؼ conventional Event ¸ðµ¨À» Á¦°øÇϰí ÀÖ´Ù. QT´Â ¸ÖƼ Ç÷§Æû GUI ¾ÖÇø®ÄÉÀ̼ÇÀ» À§ÇÑ Ç¥ÁØÀûÀÎ À¯Àú ÀÎÅÍÆäÀ̽º Áï ¸Þ´º, µå·¡±× ¾Ø µå·Ó, Åø¹Ù, dz¼± µµ¿ò¸»µîÀ» °ÅÀÇ ¿Ïº®ÇÏ°Ô Áö¿øÇÑ´Ù.
QT´Â QT DesignerÀ̶ó´Â °·ÂÇÑ À¯Àú ÀÎÅÍÆäÀ̽º µðÀÚÀÎ ÇÁ·Î±×·¥À» Á¦°øÇÑ´Ù. ÀÌ ÇÁ·Î±×·¥À» ÀÌ¿ëÇØ¼ »ç¿ëÀÚ´Â ½Ã°¢ÀûÀ¸·Î À¯Àú ÀÎÅÍÆäÀ̽º¸¦ ºü¸£°Ô µðÀÚÀÎÇÒ ¼ö ÀÖ´Ù. À̿ܿ¡µµ °·ÂÇÑ IDEÀÎ Kdevelop¸¦ ÀÌ¿ëÇØ¼ ¾ÈÁ¤ÀûÀÎ ÅëÇÕ°³¹ßȯ°æÀ» ±¸ÃàÇÒ ¼öµµ ÀÖ´Ù.
QT´Â 2D¿Í 3D±×·¡ÇÈÀ» Áö¿øÇÑ´Ù. ¶ÇÇÑ OpenGLÀ» Áö¿øÇϴµ¥ À̸¦ ÀÌ¿ëÇØ¼ Ç÷§Æû µ¶¸³ÀúÀÎ ±×·¡ÇÈ °³¹ßȰæÀÇ ±¸ÃàÀÌ °¡´ÉÇÏ´Ù.
QT´Â ¿©·¯°¡Áö Ç¥ÁØ µ¥ÀÌÅͺ£À̽ºµéÀ» Áö¿øÇϸç, À̸¦ ÀÌ¿ëÇØ¼ Ç÷§Æû µ¶¸³ÀûÀÎ µ¥ÀÌÅÍ º£À̽º¾ÖÇø®ÄÉÀ̼ÇÀ» Á¦ÀÛÇÒ ¼ö ÀÖ´Ù. QT´Â Oracle, Microsoft SQL Server, Sybase Adaptive Server, PostgreSQL, MySQL, ODBCµîÀÇ ´Ù¾çÇÑ µ¥ÀÌÅͺ£À̽º µå¶óÀ̹ö¸¦ Á¦°øÇÑ´Ù. ÀÌ·¯ÇÑ QTÀÇ µ¥ÀÌÅͺ£À̽º ÇÔ¼öµéÀº QT Designer¿¡ ¿Ïº®ÇÏ°Ô °áÇÕµÇ¾î¼ »ç¿ëÇÒ ¼ö ÀÖ´Ù. µ¥ÀÌÅͺ£À̽º ¾ÖÇø®ÄÉÀ̼ÇÀÇ °³¹ßÀ» À§Çؼ µ¥ÀÌÅͺ£À̽º °ü·Ã À§Á¬À» Áö¿øÇÑ´Ù
ÃÖ½ÅÀÇ ÅøÅ¶ÀÌ ±×·¯ÇϵíÀÌ QT¿ª½Ã style°¡ Å׸¶¸¦ Áö¿øÇϰí À̸¦ ÅëÇØ¼ Ç÷§Æû¿¡ °ü°è¾øÀÌ µ¿ÀÏÇÑ ´À³¦ÀÇ ¾ÖÇø®ÄÉÀÌ¼Ç ½ÇÇàȯ°æÀ» ¸¸µé ¼ö ÀÖ´Ù. ÇϳªÀÇ ¼Ò½º Æ®¸®°¡ ¸¸µé¾î Áø´Ù¸é ´Ù½Ã ÄÚµùÇÒ ÇÊ¿ä ¾øÀÌ ÀçÄÄÆÄÀÏ ÇÏ´Â Á¤µµ·Î Windows, Mac OS X, Linux, Solaris, HP-UX¿Í °°Àº ¿î¿µÃ¼Á¦¿¡¼ ÀÛµ¿ÇÏ´Â Äڵ带 »ý¼ºÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ ÀÓº£µðµå ȯ°æ ¿ª½Ã Áö¿øÇϰí ÀÖ´Ù. QT´Â qmak¸¦ Á¦°øÇϴµ¥ À̰ÍÀ» ÀÌ¿ëÇÏ¸é ¸ñÇ¥ Ç÷¿ÆûÀ» Áö¿øÇÏ´Â makefile°ú .dsp ÆÄÀÏÀ» ½±°Ô »ý¼ºÇÒ ¼ö ÀÖ´Ù.
QT´Â À¯´ÏÄڵ带 Áö¿øÇϴµ¥ ÀÌ´Â ±¹Á¦È¸¦ Ãæ½ÇÈ÷ Áö¿øÇÏ´Â ¾ÖÇø®ÄÉÀ̼ÇÀÇ °³¹ßÀÌ °¡´ÉÇØÁüÀ» ÀǹÌÇÑ´Ù. ÀÌ·¯ÇÑ ±¹Á¦È¸¦ À§Çؼ QT´Â Qt Linguist¿Í °°Àº ¹ø¿ªµµ±¸¸¦ Á¦°øÇÑ´Ù. QT·Î ÀÛ¼ºÇÑ ¾ÖÇø®ÄÉÀ̼ÇÀº Áß±¹, ¿µ¾î, ÀϺ»¾î, ·¯½Ã¾Æ¾î, Çѱ¹¾î¿Í °°Àº ¾ð¾î¸¦ ½±°Ô Àû¿ëÇÒ ¼ö ÀÖ´Ù. QT´Â ´Ù¾çÇÑ domain-specific Ŭ·¡½º¸¦ Áö¿øÇÑ´Ù. SAX¿Í DOM ÆÄ¼¸¦ Æ÷ÇÔÇÏ´Â XML ¸ðµâÀÌ ±×°ÍÀÌ´Ù. °´Ã¼µéÀº QT¿¡¼ Á¦°øÇÏ´Â STLÆ÷ȯ Ŭ·¡½ºµéÀ» ÅëÇØ¼ ½±°Ô ¸Þ¸ð¸®¿¡ ÀúÀåµÉ ¼ö ÀÖ´Ù. ·ÎÄÃ¿Í ¸®¸ðÆ®ÆÄÀÏ Á¦¾î ¿ª½Ã QTÀÇ Input/Output °ú ³×Æ®¿öÅ· Ŭ·¡½º¿¡ ÀÇÇØ¼ ÀÌ·ç¾îÁø´Ù. ÀÌ´Â ÄÚµåÀÇ Àϰü¼ºÀ» À¯ÁöÇÒ ¼ö ÀÖµµ·Ï µµ¿ÍÁØ´Ù.
QT ¾ÖÇø®ÄÉÀ̼ÇÀº Ç÷¯±×Àΰú µ¿Àû ¶óÀ̺귯¸®¸¦ ÅëÇØ¼ È®Àå°¡´ÉÇϵµ·Ï ÀÛ¼ºµÉ ¼ö ÀÖ´Ù. Ç÷¯±×ÀÎÀº ºÎ°¡ÀûÀÎ ÄÚµ¦, µ¥ÀÌÅͺ£À̽º µå¶óÀ̹ö, À̹ÌÁö Æ÷¸Ë, ½ºÅ¸ÀÏ, À§Á¬µîÀ» Á¦°øÇÑ´Ù.
QT´Â ½ÅÁßÇÏ°Ô °èȹµÇ¾î¼ ¸¸µé¾îÁø C++ŸŶÀ¸·Î ¼¼°èÀÇ ¸¹Àº Áö¿ª¿¡¼ »ç¿ëµÇ¾îÁö°í ÀÖ´Ù. QT´Â KDE¿Í °°Àº ¸®´ª½º µ¥½ºÅ©Å¾È¯°æÀÇ ÇÙ½ÉÀ¸·Î »ç¿ëµÇ°í ÀÖÀ¸¸ç, À̿ܿ¡µµ ¸¹Àº »ó¿ë ¾ÖÇø®ÄÉÀ̼ÇÀÇ Á¦ÀÛÀ» À§Çؼµµ »ç¿ëµÇ°í ÀÖ´Ù. 3 Widgets
QT´Â ¸ðµç À§Á¬ÀÇ ¿ÏÀüÇÑ ¼¼Æ®¸¦ Á¦°øÇÑ´Ù. À§Á¬Àº À¯Àú ÀÎÅÍÆäÀ̽º¸¦ ¸¸µé±â À§ÇÑ ½Ã°¢Àû ¿ä¼ÒµéÀÌ´Ù. ¹öư, ¸Þ´º, ½ºÅ©·Ñ ¹Ù, ¸Þ½ÃÁö ¹Ú½º, ¾ÖÇø®ÄÉÀÌ¼Ç À©µµ¿ìµîÀÌ ¸ðµÎ À§Á¬ÀÇ ¿ä¼Ò°¡ µÈ´Ù. ÀÌ·¯ÇÑ À§Á¬µéÀº ÄÁÆ®·Ñ(Controls)°ú ÄÁÅ×À̳Ê(containers)ÀÌ ºÐ¸®µÇÁö ¾ÊÀº »óÅ·Π¼³°èµÇ¾î ÀÖ´Ù. ¶ÇÇÑ ÀÌ¹Ì Á¸ÀçÇÏ´Â QTÀ§Á¬ÀÇ ¼ºê Ŭ·¡½ºµé·Î ºÎÅÍ ½±°Ô À¯Àú Á¤ÀÇ À§Á¬À» »ý¼ºÇÒ ¼ö ÀÖ´Ù. ![]()
À§Á¬Àº QWidget°ú À̰ÍÀÇ ¼ºêŬ·¡½ºÀÇ »ó¼Óµé·Î ÀÌ·ç¾îÁö¸ç »ç¿ëÀÚ Á¤ÀÇ À§Á¬Àº ¼ºêŬ·¡½º¿¡ ÀÇÇØ¼ »ý¼ºµÈ´Ù. ¾î¶² À§Á¬µéÀº ¸î°³ÀÇ ÀÚ½Ä À§Á¬À» °¡Áö°Ô µÈ´Ù. ÀÚ½Ä À§Á¬Àº ºÎ¸ð À§Á¬ÀÇ ºÎºÐÀ» º¸¿©ÁÖ´Â °ÍÀ» ´ã´çÇÑ´Ù. ºÎ¸ð°¡ ¾ø´Â À§Á¬Àº top-level À§Á¬À̶ó°í Çϸç, ±× ÀÚ½ÅÀÌ À©µµ¿ì°¡ µÉ ¼ö ÀÖ´Ù. QT´Â À§Á¬ÀÇ »ç¿ë¿¡ ÀÖ¾î¼ Á¦ÇÑÀ» °¡ÇÏÁö ¾Ê´Â´Ù. À§Á¬Àº top-level À§Á¬ÀÌ µÉ ¼ö ÀÖÀ¸¸ç µ¿½Ã¿¡ ´Ù¸¥ À§Á¬ÀÇ ÀϺηΠÂü¿©ÇÏ´Â ÀÚ½Ä À§Á¬ÀÌ µÉ ¼öµµ ÀÖ´Ù. ºÎ¸ðÀ§Á¬¿¡ Á¸ÀçÇÏ´Â ÀÚ½Ä À§Á¬ÀÇ À§Ä¡´Â layout managers¿¡ ÀÇÇØ¼ ÀÚµ¿ÀûÀ¸·Î °áÁ¤µÈ´Ù.
¶óº§, ¸Þ½ÃÁö ¹Ú½º, ÅøÆÁµîÀº »ö, ÆùÆ®, ¾ð¾îÀÇ »ç¿ëµî¿¡ ÀÖ¾î¼ Á¦ÇÑÀÌ ¾ø´Ù. QTÀÇ ÅØ½ºÆ® ·»´õ¸µ À§Á¬Àº HTMLÀÇ ¼ºê¼ÂÀ» ÀÌ¿ëÇÏ¹Ç·Î½á ¸ÖÆ¼¹ÙÀÌÆ® ¾ð¾î¿ª½Ã ¿Ïº®ÇÏ°Ô Ç¥ÇöÇÒ ¼ö ÀÖ´Ù. ¿©±â¿¡ ´ëÇØ¼´Â Text Entry and Rendering¸¦ Âü°íÇϱ⠹ٶõ´Ù. 3.1 ¾È³ç QT![]()
´ÙÀ½Àº "¾È³ç QT"¸¦ Ãâ·ÂÇÏ´Â ÇÁ·Î±×·¥ÀÇ ¿ÏÀüÇÑ ¼Ò½ºÄÚµå´Ù. #include <qapplication.h> #include <qlabel.h> #include <qstring.h> int main(int argc, char **argv) { QApplication app (argc, argv); QString Label = "<font color=blue><h1>¾È³ç QT</h1></font>"; QLabel *hello = new QLabel(QString::fromLocal8Bit(Label), 0); app.setMainWidget(hello); hello->show(); return app.exec(); }QT¿¡¼ Á¦°øÇÏ´Â tmake¸¦ ÀÌ¿ëÇØ¼ makefileÀ» »ý¼º½ÃŰ¸é °£´ÜÇÏ°Ô ÄÄÆÄÀÏ ÇÒ ¼ö ÀÖ´Ù. tmake¿¡ ´ëÇÑ ³»¿ëÀºTMake »ç¿ëÇϱ⸦ Âü°íÇϱ⠹ٶõ´Ù. 3.2 ³»Àå À§Á¬µé
´ÙÀ½ ½ºÅ©¸° ¼¦Àº QT¿¡¼ Á¦°øÇÏ´Â ³»Àå À§Á¬µéÀÇ ½ºÅ©¸°¼¦ÀÌ´Ù. QT¿¡¼ Áö¿øÇÏ´Â À§Á¬µéÀÇ ½ºÅ¸ÀÏÀ» º¼ ¼ö ÀÖ´Ù. ![]() QHBox¿¡ ÇÔ²² ¾²ÀÎ QLabel°ú QPushButton ![]() QButtonGroup¿Í QCheckBox¸¦ ÀÌ¿ëÇØ¼ ·¹À̾ƿôÀ» Àâ°í °Å±â¿¡ QRadioButtonsÀ§Á¬À» »ç¿ëÇÑ ¸ð½À ![]() QGroupBox·Î ·¹À̾ƿôÀ» Àâ°í ¿©±â¿¡ QDateTimeEdit, QLineEdit, QTextEdit, QComboBox¸¦ ¹èÄ¡ÇÑ ¸ð½À ![]() QGrid·Î ·¹À̾ƿôÀ» Àâ°í QDial, QProgressBar, QSpinBox, QScrollBar, QLCDNumber, QSliderÀ» ¹èÄ¡ÇÑ ¸ð½À QGrid·Î ·¹À̾ƿôÀ» Àâ°í QIconView, QListView, QListBox, QTable¸¦ ¹èÄ¡ÇÑ ¸ð½À
¸¹Àº µ¥ÀÌÅ͸¦ º¸¿©Áà¾ß ÇÏ´Â QTable, QListView, QTextEditÀÇ °æ¿ì ÀÚµ¿ÀûÀ¸·Î ½ºÅ©·ÑÀ» Áö¿øÇÑ´Ù. QMainWindow, QMenuBar, QToolBarÀº GUI ¾ÖÇø®ÄÉÀ̼ÇÀÇ ±âº»ÀûÀΠƲÀ» ¸¸µé¾î ÁÖ±â À§Çؼ »ç¿ëÇÑ´Ù. QMessageBox, QFileDialog, QTabDialob, QWizardµîÀÇ À§Á¬Àº ¾ÖÇø®ÄÉÀÌ¼Ç »ó¿¡¼ °¢Á¾ ´ëÈ»óÀÚµéÀ» Áö¿øÇÑ´Ù. ¶ÇÇÑ 2D ¿Í 3D ±×·¡ÇÈÀÇ Áö¿øÀ» À§ÇÑ QCanvas¿Í QGLWidgetµµ Áö¿øÇÑ´Ù.
À§ÀÇ ½ºÅ©¸´¼¦¿¡¼ º¼ ¼ö ÀÖ´Â QRadioButtons¿Í QCheckBox´Â ´ÙÀ½°ú °°Àº °£´ÜÇÑ ÄÚµå·Î ¸¸µé¾î ³¾ ¼ö ÀÖ´Ù. parent = new QButtonGroup( 2, Qt::Vertical, "QButtonGroup" ); radio1 = new QRadioButton( "&Radio 1", parent ); radio2 = new QRadioButton( "R&adio 2", parent ); radio1->setChecked( true ); check1 = new QCheckBox( "&Check 1", parent ); check2 = new QCheckBox( "C&heck 2", parent ); check2->setChecked( true ); 3.3 »ç¿ëÀÚ Á¤ÀÇ À§Á¬
QT°¡ GUI ȯ°æ¿¡¼ ÇÊ¿äÇÑ ¸ðµç À§Á¬À» Á¦°øÇϱä ÇÏÁö¸¸ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Ù º¸¸é Ç¥ÁØ À§Á¬¸¸À¸·Î´Â ºÎÁ·ÇÒ ¶§°¡ ÀÖ´Ù. QT´Â QWiget°ú ÀÌ À§Á¬ÀÇ ¼ºêŬ·¡½º µîÀ» ÀÌ¿ëÇØ¼ °£´ÜÇÏ°Ô »ç¿ëÀÚ Á¤ÀÇ À§Á¬À» ¸¸µé µµ·Ï Áö¿øÇϰí ÀÖ´Ù. ´ÙÀ½Àº clockÀ§Á¬À» ¸¸µé±â À§ÇÑ ÄÚµå´Ù. ![]()
´ÙÀ½Àº clock.h ÆÄÀÏÀÌ´Ù. #include <qlcdnumber.h>
class Clock : public QLCDNumber
{
public:
Clock( QWidget *parent = 0, const char *name = 0 );
protected:
void timerEvent( QTimerEvent *event );
private:
void showTime();
bool showingColon;
};
Clock´Â LCD¸¦ Áö¿øÇÏ´Â QLCDNumberÀ§Á¬À¸·Î ºÎÅÍ »ó¼ÓµÈ´Ù. timerEvent()ÇÔ¼ö´Â QOjbect·Î ºÎÅÍ »ó¼ÓµÈ´Ù.
´ÙÀ½Àº clock.cpp ÆÄÀÏÀÌ´Ù. #include <qdatetime.h> #include "clock.h" Clock::Clock( QWidget *parent, const char *name ) : QLCDNumber( parent, name ), showingColon( true ) { showTime(); startTimer( 1000 ); } void Clock::timerEvent( QTimerEvent * ) { showTime(); } void Clock::showTime() { QString time = QTime::currentTime().toString().left( 5 ); if ( !showingColon ) time[2] = ' '; display( time ); showingColon = !showingColon; }»ý¼ºÀÚ´Â swhoTime()À» È£ÃâÇÑ´Ù. ÀÌ ÇÔ¼ö´Â ÇöÀç ½Ã°£À¸·Î clock¸¦ ÃʱâÈ ÇÏ°í ¸Å 1000 milliseconds¸¶´Ù timerEvent()¸¦ È£ÃâÇØ¼ LCD¸¦ ¸®ÇÁ·¹½¬ ÇÑ´Ù.
showTime()À» º¸¸é QLCDNumber::display¸¦ÀÌ¿ëÇØ¼ ÇöÀç½Ã°£À» °¡Á®¿Â´Ù. ½Ã°£ÀÌ È帣°í ÀÖ´Ù´Â °ÍÀ» ½Ã°¢ÀûÀ¸·Î º¸¿©ÁÖ±â À§Çؼ Äݷаú °ø¹éÀ» ¹ø°¥¾Æ °¡¸é¼ Ãâ·ÂÇÑ´Ù.
À̰ÍÀ¸·Î ¿ÏÀüÇÑ À§Á¬ÀÌ Çϳª ¸¸µé¾î Á³´Ù. ¾Æ·¡ÀÇ ÄÚµå·Î Å×½ºÆ®ÇÒ ¼ö ÀÖ´Ù. #include <qapplication.h> #include "clock.h" int main( int argc, char **argv ) { QApplication app( argc, argv ); Clock *clock = new Clock; app.setMainWidget( clock ); clock->show(); return app.exec(); }¾Æ ÇÁ·Î±×·¥Àº ÇϳªÀÇ (clock)À§Á¬¸¸À» Æ÷ÇÔÇϰí ÀÖÀ¸¸ç ´Ù¸¥ ¾î¶² ÀÚ½Ä À§Á¬µµ Æ÷ÇÔÇϰí ÀÖÁö ¾Ê´Ù.
»ç¿ëÀÚ Á¤ÀÇ À§Á¬À» ¸¸µé¶§ scratchÀ§Á¬À» ÀÌ¿ëÇØ¼ ¸¸µé ¼öµµ ÀÖ´Ù. ¿¹¸¦ µé¾î ¾Æ³¯·Î±× ½Ã°è¸¦ ¸¸µé·Á°í ÇÑ´Ù¸é ÃÊħ, ºÐħµîÀ» ±×·Á³¾ ¼ö ÀÖÀ¸¾ß ÇÒ°ÍÀÌ´Ù. ¿©±â¿¡ ´ëÇÑ ³»¿ëÀº 2D graphics¸¦ Âü°íÇϱ⠹ٶõ´Ù. 4 ½Ã±×³Î°ú ½½·Ô
GUI ¾ÖÇø®ÄÉÀ̼ÇÀº À¯ÀúÀÇ Çൿ¿¡ ¹ÝÀÀÇØ¾ß ÇÑ´Ù. ¸Þ´º ¾ÆÀÌÅÛÀ¸ Ŭ¸¯, Åø¹Ù ¹öÅÏŬ¸¯µîÀÇ ÇൿÀ» ÇßÀ» ¶§ Àû´çÇÑ Äڵ带 ½ÇÇà ½ÃÄѾßÇÑ´Ù. trollÀº °¢ °´Ã¼°£ Åë½ÅÇÒ ¼ö ÀÖ´Â Á»´õ Áøº¸ÀûÀÎ ¹æ¹ýÀ» »ç¿ëÇÏ±æ ¿øÇß´Ù. ÀÌ·¯±â À§Çؼ ÇÁ·Î±×·¡¸Ó´Â À̺¥Æ®¿Í À̺¥Æ®¸¦ ¹Þ¾Æ¼ ó¸®ÇÒ Äڵ带 ¼·Î ¿¬°á½ÃÄÑÁÙ ¼ö ÀÖ¾î¾ß¸¸ ÇÑ´Ù. ¿À·¡µÈ ŸŶµéÀÌ »ç¿ëÇÏ´Â ¸ÅÄ¿´ÏÁòÀº ¾ÈÀüÇÏÁö ¾Ê¾Ò°í, È®ÀåÀÌ ¿ëÀÌ ÇÏÁö ¾Ê¾ÒÀ¸¸ç, °´Ã¼ÁöÇâÀûÀÌÁö ¾Ê¾Ò´Ù. Trolltech´Â À̹®Á¦ÀÇ ÇØ°áÀ» À§Çؼ ½Ã±×³Î°ú ½½·Ô(Signals and Slot)¶ó´Â ¸ÅÄ¿´ÏÁüÀ» µµÀÔÇß´Ù. ½Ã±×³Î ½½·ÔÀº Äݹé°ú ¸Å½ÃÁö ¸Ê(message maps)À» ¿ÏÀüÈ÷ ´ëüÇÏ¸ç °·ÂÇÑ ³»ºÎ °´Ã¼°£ Åë½Å ¹æ¹ýÀ» Á¦°øÇÑ´Ù. ¶ÇÇÑ È®ÀåÀÌ ¿ëÀÌÇÏ¸ç ¿ÏÀüÈ÷ °´Ã¼ÁöÇâÀÌ´Ù.
¿À·¡µÈ ÄÝ¹é ¸ÅÄ¿´ÏÁòÀº ¹öưÀ» Ŭ¸¯ÇßÀ» ¶§ ½ÇÇà½Ãų ÇÔ¼öÀÇ Æ÷ÀÎÅ͸¦ ³Ñ±â´Â ¹æ½ÄÀ¸·Î ¹öư¿¡ ´ëÇÑ Äڵ带 ½ÇÇàÇÑ´Ù. ![]()
½Ã±×³Î ½½·ÔÀ» ÅëÇÑ °´Ã¼ ¿¬°á¿¡ ´ëÇÑ °³·«ÀûÀÎ ±×¸²
QTÀÇ ½Ã±×³Î ½½·ÔÀº Äݹé°ú´Â ´Ù¸¥ ¸ÅÄ¿´ÏÁòÀ» »ç¿ëÇÑ´Ù. QTÀ§Á¬Àº À̺¥Æ®¸¦ °¨ÁöÇÏ¸é ½Ã±×³ÎÀ» ¹ß»ý½ÃŲ´Ù. ¹öưÀ» Ŭ¸¯ÇßÀ» ¶§ Ŭ¸¯ ½Ã±×³ÎÀ» ¹ß»ý½ÃŰ´Â ¿ø¸®´Ù. ÇÁ·Î±×·¡¸Ó´Â ÇØ´ç ½Ã±×³Î°ú ½Ã±×³Î¿¡ ¿¬°áµÉ ½½·Ô ÇÔ¼ö¸¦ connect()¸¦ ÅëÇØ ¿¬°á½Ãų ¼ö ÀÖ´Ù. QTÀÇ ½Ã±×³Î ½½·Ô ¸ÅÄ¿´ÏÁòÀº Ŭ·¡½º¿¡ ´ëÇÑ Á¤º¸¸¦ ÇÊ¿ä·Î ÇÏÁö ¾ÊÀ¸¸ç ¶§¹®¿¡ °³¹ßÀÚ´Â ¸Å¿ì ½±°Ô Àç»ç¿ë°¡´ÉÇÑ Å¬·¡½ºÀÇ »ý¼ºÀÌ °¡´ÉÇØ Áø´Ù. ½Ã±×³Î ½½·ÔÀº type-safeÇϸç Äݹ鿡¼ ¹ß»ýÇÒ ¼ö ÀÖ´Â Ãæµ¹µé¿¡ ´ëÇØ¼ ¾ÈÀüÇÏ´Ù.
¿¹¸¦ µé¾î¼ Quit¹öưÀ» Ŭ¸¯ÇÒ°æ¿ì clicked()½Ã±×³ÎÀ» ¾ÖÇø®ÄÉÀ̼ÇÀÇ quit()½½·Ô¿¡ ¿¬°áÇϵµ·Ï ÇÑ´Ù. ±×·³ À¯Àú°¡ ¹öưÀ» Ŭ¸¯ÇßÀ» ¶§ quit()°¡ È£ÃâµÇ°í ¾ÖÇø®ÄÉÀ̼ÇÀº Á¾·áµÈ´Ù. À̰ÍÀº ´ÙÀ½°ú °°Àº °£´ÜÇÑ ÄÚµå·Î ±¸Çö°¡´ÉÇÏ´Ù. connect(button, SIGNAL(clicked()), qApp, SLOT(quit()));
½Ã±×³Î°ú ½½·ÔÀ» ÅëÇÑ °´Ã¼ ¿¬°áÀÇ ¿¹
½Ã±×³Î ½½·Ô µµ±¸´Â C++ÀÇ ¹®¹ýÀ» µû¸£¸ç C++°´Ã¼ÁöÇâÀÇ ¸ðµç ÀÕÁ¡À» ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ type-safeÀÌ¸ç ¿À¹ö·ÎµùÇÒ ¼ö ÀÖÀ¸¸ç, À籸Çö °¡´ÉÇÏ´Ù. ¶ÇÇÑ Å¬·¡½ºÀÇ public, private, protectedÁß ¾î´À ¼½¼Ç¿¡¶óµµ ¿Ã ¼ö ÀÖ´Ù. 4.1 ½Ã±×³Î ½½·Ô ¿¹Á¦
½Ã±×³Î ½½·ÔÀ» ÀÌ¿ëÇϰíÀÚ ÇÑ´Ù¸é Ŭ·¡½º´Â ¹Ýµå½Ã QObject³ª À̰ÍÀÇ ¼ºêŬ·¡½ºÁß Çϳª·Î ºÎÅÍ »ó¼ÓµÇ¾î¾ß ÇÑ´Ù. ±×¸®°í Ŭ·¡½º Á¤ÀÇ¿¡ Q_OBJECT¸ÅÅ©·Î¸¦ Æ÷ÇÔ½ÃÄÑ¾ß ÇÑ´Ù. ½Ã±×³ÎÀº signals ¼½¼Ç¿¡ ¼±¾ðÇÏ°í ½½·ÔÀÇ °æ¿ì¿¡´Â public slots, protected slots, private slots ¼½¼ÇÁß Çϳª¿¡ ¼±¾ðÇÏ¸é µÈ´Ù.
´ÙÀ½Àº QObject ¼ºê Ŭ·¡½º ¿¹Á¦´Ù. class BankAccount : public QObject
{
Q_OBJECT
public:
BankAccount() { curBalance = 0; }
int balance() const { return curBalance; }
public slots:
void setBalance( int newBalance );
signals:
void balanceChanged( int newBalance );
private:
int curBalance;
}
C++ Ŭ·¡½ºÀÇ Çü½ÄÀÌ ±×·¸µíÀÌ 'BankAccountµµ »ý¼ºÀÚ¸¦ °¡Áø´Ù. balnace()¸¦ ÅëÇØ¼ °ªÀ» ¾ò¾î¿À°í setBalance()¸¦ ÅëÇØ¼ °ªÀ» º¯°æÇÑ´Ù.
Ŭ·¡½º´Â balanceChanged()¶ó´Â ½Ã±×³ÎÀ» °¡Áø´Ù. À̰ÍÀº °ªÀÌ ¹Ù²î¾î½Î´Â°ÍÀ» ¾Ë·ÁÁÖ±â À§Çؼ »ç¿ëÇÑ´Ù. ½Ã±×³ÎÀ» ÅëÇØ¼ °ªÀÌ ¹Ù²ï°ÍÀ» Àü¼ÛÇÏ¸é ¿¬°áµÈ ½½·ÔÀÌ ½ÇÇàµÈ´Ù.
½½·ÔÇÔ¼ö´Â public slots ¼½¼Ç¿¡ ¼±¾ðµÇ¾î ÀÖ´Ù. ½½·ÔÀº ´Ù¸¥ ÇÔ¼öµé°ú ¸¶Âù°¡Áö·Î ±×³É È£ÃâµÉ ¼öµµ ÀÖÀ¸¸ç ¿¬°áµÈ ½Ã±×³Î¿¡ ÀÇÇØ¼ È£ÃâµÉ ¼öµµ ÀÖ´Ù.
´ÙÀ½Àº setBalance()½½·ÔÀÇ Á¤ÀÇ´Ù. void BankAccount::setBalance( int newBalance ) { if ( newBalance != curBalance ) { curBalance = newBalance; emit balanceChanged( curBalance ); } }causes the balanceChanged() signal to be emitted with the new current balance as its argument. The keyword emit, like signals and slots, is provided by Qt and is transformed into standard C++ by the C++ preprocessor.
Here's an example of how to connect two BankAccounts:
BankAccount x, y;
When the balance in x is set to 2450, the balanceChanged() signal is emitted. The signal is received by y's setBalance() slot, which sets y's balance to 2450.connect( &x, SIGNAL(balanceChanged(int)), &y, SLOT(setBalance(int)) ); x.setBalance( 2450 );
One object's signal can be connected to many different slots, and many signals can be connected to one slot in a particular object. Connections are made between signals and slots whose parameters have the same types. A slot can have fewer parameters than the signal and ignore the extra parameters. 4.2 Meta Object Compiler
½Ã±×³Î ½½·Ô ¸ÅÄ¿´ÏÁòÀº Ç¥ÁØ C++ÀÇ ±â´ÉµéÀ» ÀÌ¿ëÇÑ´Ù. À̰ÍÀ» ÀÌ¿äÇϱâ À§Çؼ C++ ÇÁ¸®ÇÁ·Î¼¼¼¿Í QT ŸŶ¿¡ Æ÷ÇÔµÈ Meta Object Compiler(moc)À» »ç¿ëÇÑ´Ù.
moc´Â ¾ÖÇø®ÄÉÀ̼ÇÀÇ Çì´õÆÄÀÏÀ» ÀÐ¾î¼ ½Ã±×³Î ½½·Ô ¸ÅÄ¿´ÏÁòÀÇ Áö¿øÀÌ °¡´ÉÇÑ Äڵ带 »ý¼º½ÃÄÑÁØ´Ù. »ó´çÈ÷ »ý¼ÒÇÒÁö ¸ð¸£°ÚÁö¸¸ qmake°¡ ÀÚµ¿ÀûÀ¸·Î »ý¼ºÀ» ÇØÁÖ´Ï °³¹ßÀÚ´Â ÄÚµåÀÛ¼º¿¡¸¸ ½Å°æ¾²¸é µÈ´Ù.
moc´Â ½Ã±×³Î ½½·ÔÀ» Á¦¾îÇϵµ·Ï Äڵ带 ¸¸µé¾îÁÖ´Â ÀÏ ¿Ü¿¡µµ QTÀÇ ¹ø¿ª ¸ÅÄ¿´ÏÁòÀ» Áö¿øÇÑ´Ù. moc´Â ½Ã½ºÅÛÀÇ Æ¯¼º°ú ½Ã½ºÅÛÀÇ Æ¯¼º¿¡ ÀÇÇØ¼ È®ÀåµÇ´Â run-time type Á¤º¸µéÀ» ÀÌ¿ëÇØ¼ ½Ã½ºÅÛ¿¡ ¸Â´Â Äڵ带 »ý¼ºÇÒ ¼ö ÀÖµµ·Ï Áö¿øÇÑ´Ù. ÀÌ·¯ÇÑ ¸ÅÄ¿´ÏÁòÀº ÇϳªÀÇ QTÄڵ带 ¼öÁ¤¾øÀÌ ´Ù¸¥ Ç÷¿Æû¿¡ ½±°Ô À̽İ¡´ÉÇϵµ·Ï µµ¿ÍÁØ´Ù. 5 GUI ¾ÖÇø®ÄÉÀÌ¼Ç Á¦ÀÛ
QT¸¦ ÀÌ¿ëÇÏ¸é ¼¼·ÃµÈ GUI¾ÖÇø®ÄÉÀ̼ÇÀ» Á¦ÀÛÇÒ ¼ö ÀÖ´Ù. °Ô´Ù°¡ GUIȸé Á¦ÀÛÀ» µµ¿ÍÁÖ´Â QT Designerµµ Àִµ¥, À̰ÍÀ» ÀÌ¿ëÇÏ¸é ºñÁê¾óÇÑ È¯°æ¿¡¼ ¾ÖÇø®ÄÉÀ̼ÇÀ» Á¦ÀÛÇÒ ¼ö ÀÖ´Ù.
QT´Â ÃÖ½ÅÀÇ GUI¾ÖÇø®ÄÉÀ̼ÇÀ» ÀÛ¼ºÇϱâ À§ÇÑ ¸ðµç Ŭ·¡½º¿Í ÇÔ¼öµéÀ» Áö¿øÇϰí ÀÖ´Ù. QT´Â ¸Þ´º¹Ù, Åø¹Ù, »óÅÂ¹Ù¿Í Áß°£¿µ¿ª(¹®ÀÚ ÀÔ·ÂâÀÌ À§Ä¡ÇÏ´Â)À» °¡Áö´Â "main window" ½ºÅ¸ÀÏÀÇ ¾ÖÇø®ÄÉÀ̼ÇÀÇ Á¦ÀÛÀ» Áö¿øÇϸç, ¹öư°ú ¿É¼Ç, µµ¿ò¸», ÅǵîÀ¸·Î ±¸¼ºµÈ "dialog"½ºÅ¸ÀÏ ¾ÖÇø®ÄÉÀÌ¼Ç ¿ª½Ã Áö¿øÇÑ´Ù. ÃÖ½ÅÀÇ ÅøÅ¶ÀÌ ±×·¯ÇϵíÀÌ SDI¿Í MDI¿ª½Ã µå·¡±× ¾Ø µå·Ó, Ŭ¸³º¸µå¿ª½Ã Áö¿øÇÑ´Ù.
Åø¹Ù´Â µå·¡±× ½ÃÄѼ À§Ä¡¸¦ º¯°æÇϰųª µ¿¸³ÀûÀΠâÇü½ÄÀ¸·Î ¶ç¿ï ¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ ±â´ÉµéÀ» ±¸ÇöÇϱâ À§Çؼ ÇÁ·Î±×·¡¸Ó´Â ¾î¶°ÇÑ ºÎ°¡ÀûÀÎ Äڵ带 ÀÛ¼ºÇÒ Çʿ䰡 ¾ø´Ù. QT¿¡¼ ¾Ë¾Æ¼ ó¸®ÇØÁØ´Ù.
QT´Â ¸Þ½ÃÁö ¹Ú½º¿Í À¯ÀúÀÇ Áú¹®, ÆÄÀÏ,ÆùÆ®,»öÀÇ ¼±ÅÃÀ» À§ÇÑ Ç¥ÁØ ´ëÈ»óÀÚ¸¦ Áö¿øÇϸç, ¸îÁÙ Á¤µµ·Î °£ÆíÇÏ°Ô ÀÌµé ±â´ÉÀ» ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù. 5.1 Main Window
QMainWindow´Â ¸ÞÀÎ À©µµ¿ì¸¦ °¡Áö´Â ÀϹÝÀûÀÎ ¾ÖÇø®ÄÉÀÌ¼Ç Á¦ÀÛÀ» À§ÇÑ ÇÁ·¹ÀÓ¿öÅ©¸¦ Á¦°øÇÑ´Ù.
¸ÞÀÎ À©µµ¿ì´Â Ç¥ÁØÀûÀÎ À§Á¬ÀÇ ¼¼Æ®¸¦ Á¦°øÇÑ´Ù. ¸ÞÀÎÀ©µµ¿ìÀÇ ÀºÎºÐ¿¡´Â ¸Þ´º¹Ù, Åø¹Ù¿Í °°Àº À§Á¬ÀÌ À§Ä¡Çϰí, ¾Æ·§ºÎºÐÀº »óŹٰ¡ À§Ä¡ÇÑ´Ù.
Á»´õ Æí¸®ÇÑ À¯Àú ȯ°æÀ» Áö¿øÇϱâ À§Çؼ ÅøÆÁ°ú dz¼±µµ¿ò¸»µîµµ Áö¿øÇÑ´Ù.
SDI ¾ÖÇø®ÄÉÀ̼ÇÀÇ °æ¿ì QMainWindow À§Á¬¿¡ À§Ä¡Çϰí MDI ¾ÖÇø®ÄÉÀ̼ÇÀÇ °æ¿ì QWorkspace¿¡ Æ÷ÇԵȴÙ. 5.2 ¸Þ´º
QPopupMenuÀ§Á¬Àº ¼öÁ÷¹æÇâÀ¸·Î ¸Þ´º¾ÆÀÌÅÛÀÇ ¸ñ·ÏÀ» Ç¥½ÃÇÏ´Â À§Á¬ÀÌ´Ù. ÆË¾÷¸Þ´º´Â ÀÚü·Î »ç¿ëµÇ°Å³ª ¸Þ´º¹Ù¿¡ À§Ä¡ÇÒ ¼ö ÀÖÀ¸¸ç ´Ù¸¥ ÆË¾÷¸Þ´ºÀÇ ¼ºê¸Þ´º·Îµµ »ç¿ëµÉ¼ö ÀÖ´Ù.
ÆË¾÷¸Þ´º¿¡ ÀÖ´Â °¢°¢ÀÇ ¸Þ´º ¾ÆÀÌÅÛÀº ¾ÆÀÌÄܰú, üũ¹Ú½º ±×¸®°í (´ÜÃàŰ)accelerator)¸¦ °¡Áö°í ÀÖ´Ù. À̿ܿ¡µµ ¾ÆÀÌÅÛ ¸ñ·ÏµéÀ» ±×·ìº°·Î ³ª´©¾î¼ °ü¸®Çϱâ À§ÇÑ separator µµ Á¦°øÇÑ´Ù. À̰ÍÀº ¾ÆÀÌÅÛ ±×·ìµé »çÀ̸¦ ±¸ºÐÇÏ´Â ¼öÆòÀÇ ¼±ÇüÅ·ΠÁ¸ÀçÇØ¼ ½Ã°¢ÀûÀ¸·Î ½±°Ô ±×·ì»çÀ̸¦ ±¸ºÐÇÒ ¼ö ÀÖµµ·Ï µµ¿Í ÁØ´Ù.
´ÙÀ½Àº New, Open, Exit ¸Þ´º ¾ÆÀÌÅÛÀ» Æ÷ÇÔÇÏ´Â ÆÄÀϸ޴º¸¦ »ý¼ºÇÏ´Â ¿¹Á¦ÄÚµå´Ù. QPopupMenu *fileMenu = new QPopupMenu(this); fileMenu->insertItem("&New", this, SLOT(newFile()), CTRL+Key_N); fileMenu->insertItem("&Open...", this, SLOT(open()), CTRL+Key_O); fileMenu->insertSeparator(); fileMenu->insertItem("E&xit", qApp, SLOT(quit()), CTRL+Key_Q);¸Þ´º ¾ÆÀÌÅÛÀ» ¼±ÅÃ(Ŭ¸¯)ÇÏ¸é ½½·Ô¿¡ µî·ÏµÈ ÇÔ¼ö°¡ ½ÇÇàµÈ´Ù.
QMenuBar Ŭ·¡½º´Â ¸Þ´º¹Ù¸¦ ±¸¼ºÇϱâ À§Çؼ »ç¿ëÇÑ´Ù. ÀÌ À§Á¬Àº »ý¼ºµÇ¸é ÀÚµ¿ÀûÀ¸·Î ºÎ¸ðÀ§Á¬(º¸Åë QMainWindow)ÀÇ °¡ÀåÀ§¿¡ ÀÚ¸®¸¦ Àâ°Ô µÈ´Ù. ¸¸¾à ºÎ¸ð À©µµ¿ì°¡ ¸Þ´º¹ÙÀÇ ¸ðµç ³»¿ëÀ» ´ã±â¿¡ ÃæºÐÈ÷ Å©Áö ¾Ê´Ù¸é ¸Þ´º¹Ù´Â ÀÚµ¿ÀûÀ¸·Î ¿©·¯°³ÀÇ ¶óÀÎÀ¸·Î ºÐ¸®µÇ¾î¼ Ç¥½ÃµÈ´Ù. QT´Â ³»Àå ·¹À̾ƿô °ü¸®ÀÚ¸¦ °¡Áö°í Àִµ¥, ¾Ë¾Æ¼ ¸Þ´º¹Ù¸¦ ´Ù¸¥ À§Á¬µé°ú Á¶ÈµÇµµ·Ï ¸¸µé¾îÁØ´Ù.
´ÙÀ½Àº File, Edit, Help ¸Þ´º¸¦ Æ÷ÇÔÇÏ´Â ¸Þ´º¹ÙÀÇ ÄÚµå´Ù. QMenuBar *bar = new QMenuBar(this); bar->insertItem("&File", fileMenu); bar->insertItem("&Edit", editMenu); bar->insertItem("&Help", helpMenu);
QTÀÇ ¸Þ´º½Ã½ºÅÛÀº ¸Å¿ì À¯¿¬ÇÏ´Ù. ¸Þ´º ¾ÆÀÌÅÛÀº Ȱ¼ºÈ,ºñȰ¼ºÈ, Ãß°¡, »èÁ¦°¡ µ¿ÀûÀ¸·Î °¡´ÉÇϵµ·Ï µÇ¾î ÀÖ´Ù. ¶ÇÇÑ QCustomMenuItem ¼ºêŬ·¡½º¸¦ ÀÌ¿ëÇØ¼ »ç¿ëÀÚ Á¤ÀÇ °¡´ÉÇÑ ¸Þ´º ¾ÆÀÌÅÛµéÀ» ¸¸µé¾î ³¾ ¼ö ÀÖ´Ù. 5.3 Åø¹Ù
QToolButtonŬ·¡½º´Â ¾ÆÀÌÄÜ, 3DÇÁ·¹ÀÓ, ¶óº§À» °¡Áö´Â Åø¹Ù¸¦ Áö¿øÇÑ´Ù. Åä±Û(Toggle)Åø¹Ù ¹öưÀ» ÀÌ¿ëÇØ¼ ¾î¶² ±â´ÉÀ» on,off ½ÃŰ°Å³ª, ¸í·ÉÀ» ½ÇÇà½ÃŰ´Â µîÀÇ ÀÏÀ»ÇÑ´Ù. »óÅ¿¡ µû¶ó¼ ¾ÆÀÌÄÜÀ» Ȱ¼ºÈ, ºñȰ¼ºÈ, on, off½Ãų ¼ö ÀÖ´Ù.
QTollButtons´Â ÀϹÝÀûÀ¸·Î QTollBar°ú ÇÔ²² »ç¿ëµÈ´Ù. Åø¹Ù´Â QComboBox ¿Í QSpinBoxÀ» ºñ·ÔÇÑ ¸ðµç À§Á¬À» Æ÷ÇÔ½Ãų ¼ö ÀÖ´Ù. 5.4 dz¼± µµ¿ò¸»
ÃÖ±ÙÀÇ ¾ÖÇø®ÄÉÀ̼ÇÀº dz¼± µµ¿ò¸»À» °ÅÀÇ ÇʼöÀûÀ¸·Î Áö¿øÇÑ´Ù. À̰ÍÀº »ç¿ëÀÚ°¡ Åø¹ÙÀÇ ¾ÆÀÌÄܵ ¸¶¿ì½º¸¦ ´ë°í Àְųª ƯÁ¤ÇÑ ¹®ÀÚ¿¡ ¸¶¿ì½º¸¦ ´ë¸é °£´ÜÇÑ µµ¿ò¸»À» Ãâ·ÂÇØÁØ´Ù. QT´Â ÅøÆÁ(tooltips)°ú "What's this?" µÎ°¡Áö ÇüÅ·Πdz¼± µµ¿ò¸»À» Áö¿øÇÑ´Ù.
ÅøÆÁÀº ¸¶¿ì½º¸¦ À§Á¬À§¿¡ ¿Ã·Á ³õÀ¸¸é ÀÚµ¿ÀûÀ¸·Î °ü·Ã µµ¿ò¸»À» Ãâ·ÂÇÑ´Ù. ÀÌ·¯ÇÑ µµ¿ò¸»Àº ³ë¶õ»ö ¹ÙÅÁÀÇ »ç°¢Çü ¶óº§À§¿¡ Ãâ·ÂµÈ´Ù. À̿ܿ¡µµ Åø¹Ù¿¡ À§Ä¡ÇÏ´Â ¾ÆÀÌÄÜÀÇ ¼³¸íµîÀ» À§Çؼ »ç¿ëÇÑ´Ù. ÅøÆÁÀº ¾Æ·¡¿Í °°ÀÌ °£´ÜÇÏ°Ô ¸¸µé ¼ö ÀÖ´Ù. QToolTip::add(saveButton, "Save File");¶ÇÇÑ ÅøÆÁÀº »óŹÙ(status bar)¿¡ º¸À̵µ·Ï ÇÒ ¼ö ÀÖ´Ù.
"What's this?"´Â ÅøÆÁ°ú´Â ´Þ¸® »ç¿ëÀÚ°¡ ¿äûÀ» ÇØ¾ß¸¸ µµ¿ò¸»À» Ãâ·ÂÇÑ´Ù´Â °ÍÀ» Á¦¿ÜÇϰí´Â ÅøÆÁ°ú ºñ½ÁÇÏ´Ù. ¿¹¸¦ µé¾î Shift+F1À» ´©¸£°í À§Á¬À̳ª ¾ÆÀÌÄÜÀ» Ŭ¸¯ÇÏ¸é °Å±â¿¡ ´ëÇÑ µµ¿ò¸»ÀÌ Ãâ·ÂµÇ´Â Çü½ÄÀÌ´Ù. ´ÙÀ½Àº "Save"Åø¹Ù ¹öư¿¡ ´ëÇÑ "What's this?"µµ¿ò¸»À» ÀÛ¼ºÇÏ´Â ÄÚµå´Ù. QWhatsThis::add( saveButton, "Saves the current file." );QToolTip°ú QWhatsThis Ŭ·¡½º´Â °¡»óÇÔ¼ö¸¦ Áö¿øÇϸç, À̸¦ ÀÌ¿ëÇØ¼ »ç¿ëÀÚ Á¤ÀÇ °¡´ÉÇÑ Æ¯¼öÇÑ ÇൿÀÌ °¡´ÉÇϵµ·Ï ÀçÀÛ¼ºÇÒ ¼ö ÀÖ´Ù. 5.5 Çൿ (Actions)
ÀϹÝÀûÀ¸·Î ¾ÖÇø®ÄÉÀ̼ÇÀº Ưº°ÇÑ Çൿ¿¡ ´ëÇØ¼ ¿©·¯°¡Áö ¼öÇà¹æ¹ýÀ» Á¦°øÇÑ´Ù. ÆÄÀÏÀ» ÀúÀåÇÏ´Â ÇൿÀ» ¿¹·Î µé¾îº¸ÀÚ. ´ëºÎºÐÀÇ ¾ÖÇø®ÄÉÀ̼ÇÀº ÆÄÀÏ ÀúÀåÀÇ ¼öÇàÀ» À§Çؼ ¸Þ´º·ÎºÎÅÍ Save¸¦ ¼±ÅÃÇÏ´Â ¹æ¹ý°ú, Åø¹Ù·Î ºÎÅÍ ¼öÇàÇÏ´Â(Ç÷ÎÇÇ µð½ºÅ© ¸ð¾çÀÇ ¾ÆÀÌÄÜÀ» Ŭ¸¯)¹æ½Ä°ú Ctrl+S°ú °°Àº ´ÜÃà۸¦ ÀÌ¿ëÇÏ´Â ¹æ¹ýÀ» Á¦°øÇÑ´Ù. QActionŬ·¡½º´Â À§ÀÇ °ÍµéÀ» ĸ½¶È ÇØ¼ Áö¿øÇÑ´Ù. ÇÁ·Î±×·¡¸Ó´Â ÇѹøÀÇ ÄÚµùÀ¸·Î °£´ÜÇÏ°Ô »ç¿ëÀÚ¿¡°Ô ¿©·¯°¡Áö Çൿ¹æ½ÄÀ» Áö¿øÇÒ ¼ö ÀÖ´Ù.
´ÙÀ½Àº SaveÇൿ¿¡ ´ëÇØ¼ ¸Þ´º¾ÆÀÌÅÛ, Åø¹Ù¹öư, ´ÜÃàŰ, dz¼±µµ¿ò¸»À» ¸ðµÎ Áö¿øÇϵµ·Ï ¸¸µç ÄÚµå´Ù. QAction *saveAct = new QAction( "Save", saveIcon, "&Save",
CTRL+Key_S, this );
connect( saveAct, SIGNAL(activated()), this, SLOT(save()) );
saveAct->setWhatsThis( "Saves the current file." );
saveAct->addTo( fileMenu );
saveAct->addTo( toolbar );
¿©·¯°³ÀÇ ÇൿµéÀ» Á¤ÀÇÇÏ´Ùº¸¸é ÇÁ·Î±×·¡¸ÓÀÇ ½Ç¼ö·Î Áߺ¹µÇ´Â °á°ú°¡ »ý±æ¼ö Àִµ¥, QActionÀº ¸Þ´º¾ÆÀÌÅÛ°ú Åø¹Ù »óÅÂÀÇ µ¿±âȸ¦ ÅëÇØ¼ ÀÌ·¯ÇÑ ½Ç¼ö¸¦ ¿¹¹æÇÑ´Ù. 5.6 Áß¾Ó À§Á¬(Central Widget)
QMainWindowÀÇ Áß¾Ó¿¡´Â ¾î¶°ÇÑ À§Á¬ÀÌ¶óµµ ¿Ã ¼ö ÀÖ´Ù. ¿¡µðÅÍ ÇÁ·Î±×·¥À» ¸¸µé±â ¿øÇÑ´Ù¸é ÅØ½ºÆ® ÀÔÃâ·ÂÀÌ °¡´ÉÇÑ QTextEdit°¡ Áß¾Ó À§Á¬À¸·Î »ç¿ëµÉ °ÍÀÌ´Ù. QTextEdit *editor = new QTextEdit( mainWindow ); mainWindow->setCentralWidget( editor ); 5.7 Multiple Document Interface
MDI´Â QWorkspaceŬ·¡½º¿¡ ÀÇÇØ¼ Áö¿øµÈ´Ù. ÀÌ À§Á¬Àº º¸Åë QMainWindowÀÇ Áß¾Ó À§Á¬À¸·Î ÀÌ¿ëµÈ´Ù.
QWorkspaceÀÇ ÀÚ½Ä À§Á¬À¸·Î´Â ¾î¶°ÇÑ °ÍÀÌ¶óµµ ¿Ã ¼ö ÀÖ´Ù. show(), hide(), showMaximized(), setCaption()µî°ú °°Àº ¸Þ¼µå¸¦ ÀÌ¿ëÇØ¼ MDIÀÇ À§Á¬À» Á¦¾îÇÒ ¼ö ÀÖ´Ù.
QWorkspace´Â cascade¿Í tile¹æ½ÄÀÇ Á¤·ÄÀ» Áö¿øÇÑ´Ù. ¸¸¾à ÀÚ½Ä À§Á¬ÀÌ MID ¿µ¿ªÀ» ¹þ¾î³ª¸é ÀÚµ¿ÀûÀ¸·Î ½ºÅ©·Ñ¹Ù°¡ ³ªÅ¸³´Ù. ÀÚ½Ä À§Á¬ÀÌ ÃÖ´ëÈ µÇ¾ú´Ù¸é ÀÚµ¿ÀûÀ¸·Î ¸Þ´º¹Ù¿¡ ÃÖ¼ÒÈ ¹öưÀÌ ³ªÅ¸³´Ù. 5.8 ´ëÈ»óÀÚ(Dialogs)
¸ðµç GUI¾ÖÇø®ÄÉÀ̼ÇÀº »ç¿ëÀÚ¿ÍÀÇ »óÈ£ÀÛ¿ëÀ» À§Çؼ ´ëÈ»óÀÚ¸¦ Áö¿øÇÑ´Ù. QT´Â ¸ðµç ÀϹÝÀûÀÎ ´ëÈ»óÀÚ¸¦ Á¦°øÇÑ´Ù.
´ÙÀ½Àº QT¿¡¼ Áö¿øÇϴ ǥÁØ ´ëÈ»óÀÚµéÀÇ ½ºÅ©¸°¼¦ÀÌ´Ù. ¾Æ·¡¿¡´Â ³ª¿ÍÀÖÁö ¾ÊÁö¸¸ QT´Â »ö¼±ÅÃ, ÇÁ¸°Æ® ¿É¼Ç ¼³Á¤À» À§ÇÑ ´ëÈ»óÀڵ鵵 Á¦°øÇÑ´Ù. border=0
QMessageBox
QMessageBox´Â ¼±Åÿ¡ °üÇÑ °£´ÜÇÑ ¹°À½À» »ç¿ëÀÚ¿¡°Ô º¸¿©ÁÖ°í ¼±ÅÃÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù. ![]()
QFileDialog
QFileDialog´Â ÆÄÀϼ±Åà ´ëÈ»óÀÚ´Ù. ½ºÅ©¸°¼¦¿¡¼ º¼ ¼ö ÀÖ´Â °Íó·³ ´ÙÁßÀÇ ÆÄÀÏÀ» ¼±ÅÃÇÒ ¼ö ÀÖÀ¸¸ç, ·ÎÄûӸ¸ ¾Æ´Ï¶ó (FTP °°Àº)¿ø°ÝÆÄÀϵµ Áö¿øÇÑ´Ù. ÆÄÀÏÀÇ ¼±Åÿܿ¡µµ À̸§º¯°æ, µð·ºÅ丮 »ý¼º°ú °°Àº °£´ÜÇÑ ÆÄÀϰü·Ã ÀÛ¾÷µµ ÇÒ ¼ö ÀÖ´Ù. ´ëºÎºÐÀÇ QT´ëÈ»óÀÚµéÀÌ ±×·¸µíÀÌ QFileDialogµµ Å©±âÀÇ Á¶ÀýÀÌ °¡´ÉÇÏ´Ù. ¾ÖÇø®ÄÉÀ̼ÇÀº °¢ ¿î¿µÃ¼Á¦¿¡ ¸Â´Â Àû´çÇÑ ´ëÈ»óÀÚ¸¦ Ãâ·ÂÇÑ´Ù. ![]()
QProgressDialog
ÁøÇàÁ¤µµ¸¦ Ç¥½ÃÇϱâ À§Çؼ »ç¿ëÇÑ´Ù. ![]()
QWizard
¸¶¹ý»çÅø ![]()
QFontDialog
ÆùÆ® ¼±ÅÃÀ» À§ÇÑ ´ëÈ»óÀÚ´Ù.
ÇÁ·Î±×·¡¸Ó´Â QT¿¡¼ ±âº»ÀûÀ¸·Î Á¦°øÇÏ´Â ´ëÈ»óÀÚ¿Ü¿¡µµ »ç¿ëÀÚ Á¤ÀÇ ´ëÈ»óÀÚÀÇ Á¦ÀÛÀÌ °¡´ÉÇÏ´Ù. »ç¿ëÀÚ Á¤ÀÇ ´ëÈ»óÀÚ´Â QWidget, QDialogµîÀÇ »ó¼Ó¿¡ ÀÇÇØ¼ Á¦ÀÛÇÒ ¼ö ÀÖ´Ù. 5.9 Dock Windows
Dock windows are windows that the user can move inside a toolbar area or from one toolbar area to another. The user can undock a dock window and make it float on top of the application or minimize it. Dock windows and toolbar areas are provided by the QDockWindow and QDockArea classes.
Qt provides one QDockWindow subclass, QToolBar. QMainWindow automatically provides four toolbar areas, one on each side of the central widget.
Developers can create custom dock windows by instantiating a QDockWindow object and by adding widgets to it. The widgets are laid out side by side if the toolbar area is horizontal (e.g. at the top of the main window) and above each other if the area is vertical (e.g. at the left of the main window).
Dock areas are not bound to QMainWindow; developers can use QDockArea in any custom widget. Toolbars and other dock windows can be used with any toolbar area.
Some applications, including Qt Designer and Qt Linguist, use dock windows extensively. QDockArea provides operators to save and restore the position of dock windows, so that applications can easily restore the user's preferred positions. 5.10 Settings
¾ÖÇø®ÄÉÀ̼ÇÀ» ÀÛ¼ºÇÏ´Ù º¸¸é À¯ÀúÀÇ ¼³Á¤°ªµîÀ» º¯°æÇØ¾ß µÇ´Â °æ¿ì°¡ ÀÖ´Ù. ÀÌ·²°æ¿ì °£È¤ DB¸¦ »ç¿ëÇϱ⵵ ÇÏÁö¸¸ º¸ÅëÀº ÀÏ¹Ý ÆÄÀÏ¿¡ ÀúÀåÇÏ´Â °æ¿ì°¡ ´ëºÎºÐÀÌ´Ù. ÀÌ·¯ÇÑ ¼³Á¤ÀÛ¾÷À» À§Çؼ QSettings Ŭ·¡½º°¡ »ç¿ëµÈ´Ù. Ç÷§Æû¿¡ µû¶ó¼ ÀúÀåÇÒ Àå¼Ò·Î ·¹Áö½ºÅ͸®¿Í ÀÏ¹Ý ÆÄÀÏÀ» ¼±ÅÃÇÒ ¼ö ÀÖ´Ù.
ÀϹÝÀûÀÎ ¼³Á¤ ÀúÀåÀº ۸¦ ÀÌ¿ëÇÏ´Â ¹æ¹ýÀÌ´Ù. ¿¹¸¦µé¾î SoftwareInc/RecentFilesµîÀ» Ű·Î ÇÏ°í ¿©±â¿¡ Àû´çÇÑ °ªÀ» ÀúÀåÇÏ´Â ¹æ½ÄÀÌ´Ù. SoftwareInc=www.joinc.co.kr RecentFiles=wiki.htmlÀúÀå °ªÀ¸·Î´Â ¼ýÀÚ, À¯´ÏÄÚµå ¹®ÀÚ, BooleansµîÀÌ »ç¿ëµÉ ¼ö ÀÖ´Ù. 5.11 ¸ÖƼ ¾²·¹µå
GUI¾ÖÇø®ÄÉÀ̼ÇÀº ƯÈ÷ ¸ÖƼ ¾²·¹µå¸¦ ÀÌ¿ëÇØ¾ßÇÏ´Â °æ¿ì°¡ ¸¹´Ù. ¸ÖƼ¾²·¹µå ÇÁ·Î±×·¡¹ÖÀ» ÇÒ°æ¿ì ÇÁ·Î±×·¡¸Ó´Â ¾²·¹µå°£ µ¥ÀÌÅÍ °øÀ¯¿Í ¾²·¹µå°£ µ¿±âȵîÀ» À§Çؼ ¸¹Àº ³ë·ÂÀ» ÇØ¾ßÇϸç, ¸¹Àº ¼öÀÇ ¾²·¹µå ÇÔ¼ö¿¡ ´ëÇØ¼ ¾Ë°íÀÖ¾î¾ß ÇÑ´Ù. QT´Â QThread, QMutex, QMutexLocker, QSemaphore¿Í QWaitCondition Ŭ·¡½º¸¦ Á¦°øÇÑ´Ù. À̵é Ŭ·¡½º´Â ³ôÀº ¼öÁØÀÇ Å¬·¡½ºµé·Î½á ÃÖ¼ÒÇÑÀÇ ³ë·ÂÀ¸·Î È¿°úÀûÀÎ ÄÚµåÀÇ ÀÛ¼ºÀÌ °¡´ÉÇϵµ·Ï µµ¿ÍÁØ´Ù. 6 QT °³¹ßµµ±¸µé6.1 QT Designer
QTDesignerÀº QT·Î ÀÛ¼ºµÇ¾îÁø ºñÁê¾óÇÑ À¯ÀúÀÎÅÍÆäÀ̽º ¹× ÄÚµå ÀúÀÛÅøÀÌ´Ù. ÀÌ °ÍÀ» ÅëÇØ¼ ¿ÏÀüÇÑ ¼Ò½ºÄÚµùÀÌ °¡´ÉÇϸç, ºü¸¥ °³¹ßÀÌ °¡´ÉÇØÁø´Ù.
QTDesignerÀ» ÀÌ¿ëÇÑ µðÀÚÀÎÀº Á÷°üÀûÀÌ°í °£´ÜÇÑ °úÁ¤À» µû¸¥´Ù. °³¹ßÀÚ´Â »ç¿ëÇϱ⠿øÇÏ´Â À§Á¬À» Ŭ¸¯ÇÑ´ÙÀ½¿¡ ¿øÇÏ´Â Àå¼Ò¿¡ À§Ä¡½Ã۰í À§Á¬ÀÇ Å©±â¸¦ (µå·¡±×¸¦ ÅëÇØ¼) °áÁ¤Çϱ⸸ ÇÏ¸é µÈ´Ù. À§Á¬ÀÇ ¿©·¯°¡Áö Ư¡Àº property editorÀ» ÅëÇØ¼ °áÁ¤ÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î ¾î¶² ¹öư À§Á¬À» ¼±ÅÃÇß´Ù°í ÇÏÀÚ. ÀÌ ¹öưÀÇ À̸§À» Á¾·á·Î ÇÏ°í ½Í´Ù¸é property editorÀÇ text°ª¿¡ Á¾·á¸¦ ÀÔ·ÂÇϱ⸸ ÇÏ¸é µÈ´Ù. VC++°ú º¼·£µå C++ºô´õÀÇ ºñÁê¾óÇÑ È¯°æÀ» »ý°¢ÇÏ¸é µÉ°ÍÀÌ´Ù.
QTDesignerÀº ÀÎÅÍÆäÀ̽º µðÀÚÀÎÀ» À§Çؼ complie, link, run °úÁ¤ÀÌ ÇÊ¿ä ¾ø´Ù. ´«¿¡ º¸ÀÌ´Â ±×´ë·Î ½ÇÇàµÉ°ÍÀ̶ó´Â °ÍÀ» º¸ÀåÇϱ⠶§¹®ÀÌ´Ù. ÀÌ´Â ÀÎÅÍÆäÀ̽º µðÀÚÀο¡ °É¸®´Â ½Ã°£À» ȹ±âÀûÀ¸·Î ÁÙ¿©ÁØ´Ù. QTDesignerÀº ¹Ì¸®º¸±â ±â´ÉÀ» ÀÌ¿ëÇØ¼ °³¹ßÀÚ°¡ ¸¸µç ÀÎÅÍÆäÀ̽º°¡ ´Ù¸¥ ½ºÅ¸ÀÏ¿¡¼´Â ¾î¶»°Ô º¸ÀÏÁö¸¦ ¹Ì¸® º¸¿©ÁØ´Ù. ¿¹¸¦µé¾î À©µµ¿ì ȯ°æ¿¡¼ ÀÎÅÍÆäÀ̽º¸¦ µðÀÚÀÎÇÏ´õ¶óµµ ¸ÅŲÅä½Ã³ª ¸®´ª½º¿¡¼ ¾î¶»°Ô º¸¿©ÁúÁö¸¦ ¹Ì¸® È®ÀÎÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ QtÀÇ µ¥ÀÌÅͺ£À̽º Ŭ·¡½º¿Í ÅëÇÕµÇ¾î¼ µ¥ÀÌÅͺ£À̽ºÀÇ µ¥ÀÌÅ͸¦ ÆíÁýÇÏ°í ±× °á°ú¸¦ ¹Ì¸® È®ÀÎÇÒ ¼ö ÀÖµµ·Ï µÇ¾îÀÖ´Ù.
°³¹ßÀÚ´Â main window¿Í dialog½ºÅ¸ÀÏÀÇ ¾ÖÇø® ÄÉÀÌ¼Ç ¸ðµÎÀÇ °³¹ßÀÌ °¡´ÉÇÏ´Ù.
¿©·¯°¡Áö ÅÛÇø´À» Á¦°øÇϸç, °³¹ßÀÚ Á¤ÀÇµÈ ÅÛÇø´À» ¸¸µé ¼öµµ ÀÖ´Ù. ÀÌ ÅÛÇø´Àº ¾ÖÇø®ÄÉÀ̼ǿ¡ Åõ¸íÇÏ°Ô Àû¿ëµÈ´Ù. QTdesignerÀÇ ¸¶¹ý»ç(wizard)¸¦ ÀÌ¿ëÇϸé Åø¹Ù, ¸Þ´º, µ¥ÀÌÅͺ£À̽º ¾ÖÇø®ÄÉÀ̼ÇÀ» ºü¸£°í ½±°Ô Á¦ÀÛÇÒ ¼ö ÀÖ´Ù. ÇÁ·Î±×·¡¸Ó´Â ÀÚ½ÅÀÌ »ý¼ºÇÑ À§Á¬À» QTDesigner¿¡¼ ½±°Ô ÅëÇÕÇÒ ¼ö ÀÖ´Ù.
QTDesignerÀº ÇÁ·ÎÁ§Æ® ±â¹ÝÀÇ ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ß ȯ°æÀ» Áö¿øÇÑ´Ù. ÇÁ·ÎÁ§Æ®´Â a.proÇü½ÄÀ¸·Î ÀúÀåµÇ¸ç qmake¿¡ ÀÇÇØ¼ makefile·Î º¯°æµÈ´Ù. °³¹ßÀÚ´Â ¿©±â¿¡ ÆûÀ» ´õÇÏ°í ¼Ò½ºÆÄÀÏÀ» Ãß°¡Çؼ ¿ÏÀüÇÑ ÇÁ·ÎÁ§Æ®·Î ¸¸µé ¼ö ÀÖ´Ù. QTDesignerÀ» ÀÌ¿ëÇÏ¸é °³¹ßÀÚ´Â ÄÚµå·Î ºÎÅÍ ÀÎÅÍÆäÀ̽º¸¦ ¿ÏÀüÈ÷ ºÐ¸® ½Ãų ¼ö ÀÖ´Ù.
¾ÆÀÌÄܰú ´Ù¸¥ À̹ÌÁöµéÀº ÇÁ·ÎÁ§Æ®µéÀÇ Æû¿¡¼ ¸ðµÎ °øÀ¯µÇ¾î¼ »ç¿ëµÈ´Ù. À̰ÍÀº ½ÇÇàÆÄÀÏÀÇ Å©±â¸¦ ÁÙÀ̰í Á»´õ »¡¸® ½ÇÇàµÉ ¼ö ÀÖµµ·Ï µµ¿ÍÁØ´Ù.
µðÀÚÀÎµÈ ÆûÀº .ulÆÄÀÏ·Î XMLÇü½ÄÀ¸·Î ÀúÀåµÈ´Ù. ÀÌ ÆÄÀÏÀº uic(User Interface Compiler)¿¡ À¸Çؼ C++Çì´õÆÄÀϰú ¼Ò½ºÆÄÀÏ·Î º¯°æµÈ´Ù. qmake´Â uic¸¦ À§ÇÑ ·êÀ» Æ÷ÇÔÇÑ makefileÀ» ÀÚµ¿ÀûÀ¸·Î »ý¼ºÇÑ´Ù. °³¹ßÀÚ´Â uicÀÇ »ç¿ë¹æ¹ýµî¿¡ ´ëÇØ¼ ½Å°æ¾µ Çʿ䰡 ¾ø´Ù.
ÀϹÝÀûÀ¸·Î ÆûÀº ÄÄÆÄÀÏµÇ¾î¼ ½ÇÇàÆÄÀÏÇüÅ·Π¸¸µé¾îÁø´Ù. ±×·¯³ª ¶§¶§·Î »ç¿ëÀÚ´Â ¼Ò½ºÄÚµåÀÇ ¿¢¼¼½º¾øÀÌ ¾ÖÇø®ÄÉÀ̼ÇÀÇ ¸ð¾çÀ» º¯°æÇϱ⸦ ¿øÇÏ´Â °æ¿ì°¡ ÀÖ´Ù. ÀÌ·²°æ¿ì¸¦ ´ëºñÇØ¼ QT´Â dynamic dialog¸¦ Áö¿øÇÑ´Ù.. .uiÆÄÀÏÀº ½ÇÇà½Ã°£(run-time)¿¡ ÀÐÇô Áú¼ö ÀÖÀ¸¸ç µ¿ÀûÀ¸·Î ÆûÀÌ »ý¼ºµÈ´Ù. ¿¹¸¦µéÀÚ¸é °¢ ȸ»ç´Â °í°´ÀÇ Æ¯¼º¿¡ µû¶ó¼ Àû´çÇÑ ÆûÀ» ¼Ò½ºÄÚµåÀÇ Á¦ÄÄÆÄÀÏÀ̳ª, ¹ÙÀ̳ʸ®ÀÇ º¯È¯¾øÀÌ .uiÆÄÀϸ¸ º¯°æÇØ ÁÜÀ¸·Î½á ¸¸µé¾î ÁÙ¼ö ÀÖ°Ô µÈ´Ù. dinamic dialog´Â ´ÙÀ½°ú °°Àº ¹æ¹ýÀ¸·Î ½±°Ô ¸¸µé¾î Áú ¼ö ÀÖ´Ù. QDialog *creditForm = (QDialog *)
QWidgetFactory::create("ucreditform.ui");
6.2 QT Assistant
QTDesignerÀº QT Assistant¶ó´Â ¿Â¶óÀÎ µµ¿ò¸» ¾ÖÇø®ÄÉÀ̼ÇÀ» Áö¿øÇÑ´Ù. QT Assistant´Â QTÀÇ ¸ðµç ¹®¼µéÀ» Æ÷ÇÔÇϸç, À¥ºê¶ó¿ìÀú¿Í ºñ½ÁÇÑ ¸ð½ÀÀ¸·Î º¸¿©ÁØ´Ù. ±×·¯³ª À¥ºê¶ó¿ìÀú¿¡¼´Â Áö¿øÇÏÁö ¾Ê´Â full text °Ë»öÀ» Áö¿øÇÑ´Ù.
QTÀÇ ·¹ÆÛ·±½º ¹®¼´Â 1,600ÆäÀÌÁö¿¡ ´ÞÇϸç, ¿©±â¿¡´Â QTÀÇ Å¬·¡½º¿Í µµ±¸µé overviews, QTÇÁ·Î±×·¡¹Ö¿¡ ´ëÇÑ ´Ù¾çÇÑ ¼Ò°³µîÀÇ ³»¿ëÀ» ´ã°í ÀÖ´Ù.
°³¹ßÀÚ´Â QT Assistant µµ¿ò¸» ºê¶ó¿ìÀú¸¦ Á¦ÀÛÇÑ ¾ÖÇø®ÄÉÀ̼ÇÀ̳ª ¹®¼µî¿¡ ¹èÄ¡½Ãų¼ö ÀÖ´Ù. ÀÌ·¯ÇÑ ÀÏÀº QAssistantClient Ŭ·¡½º¸¦ ÀÌ¿ëÇØ¼ °¡´ÉÇØÁø´Ù. QT Assistant´Â QTÀÇ HTML·¹ÆÛ·±½º ¹®¼¸¦ QTextEdit¸¦ ÀÌ¿ëÇØ¼ ·»´õ¸µ ½ÃŲ´Ù. °³¹ßÀÚ´Â ÀÌ Å¬·¡½º¸¦ ÀÌ¿ëÇØ¼ ÀڽŸ¸ÀÇ µµ¿ò¸» ºê¶ó¿ìÀú¸¦ ¸¸µé ¼öµµ ÀÖ´Ù. QTextEdit´Â HTML 3.2¸¦ Áö¿øÇϸç QStyleSheet Ŭ·¡½º¸¦ ÀÌ¿ëÇØ¼ »ç¿ëÀÚ Á¤ÀÇ Å±׸¦ ¸¸µé ¼öµµ ÀÖ´Ù. 7 GUI ¾ÖÇø®ÄÉÀÌ¼Ç ¿¹Á¦
À§ÀÇ ÀÀ¿ëÀº °èÃþÀû ±¸Á¶¸¦ º¸¿©ÁÖ´Â Hierarchy ÇÁ·Î±×·¥ÀÌ´Ù.
À§ÀÇ ±¸ÇöÀ» À§ÇÑ ¿ÏÀüÇÑ ¼Ò½ºÅ©µå´Â ¾Æ·¡¿¡ Á¦°øµÇ°í ÀÖ´Ù. main.cpp ÆÄÀÏÀº QT DEsigner wizard¿¡ ÀÇÇØ¼ »ý¼ºµÇ¾ú´Ù.
addSearchPath(), removeSearchPath(), updateHierarchy()ÇÔ¼ö´Â ¸ðµÎ ½½·ÔÀ¸·Î QT Designer¿¡ ÀÇÇØ¼ »ý¼ºµÈ ¹öưÀ» ÅëÇØ¼ ¿¬°áµÈ´Ù. void ClassHierarchy::addSearchPath() { QString path = QFileDialog::getExistingDirectory( QDir::homeDirPath(), this, 0, "Select a Directory" ); if ( !path.isEmpty() && searchPathBox->findItem(path, ExactMatch) == 0 ) searchPathBox->insertItem( path ); } void ClassHierarchy::removeSearchPath() { searchPathBox->removeItem( searchPathBox->currentItem() ); } void ClassHierarchy::updateHierarchy() { QString fileNameFilter; QRegExp classDef; if ( language->currentText() == "C++" ) { fileNameFilter = "*.h"; classDef.setPattern( "\\bclass\\s+([A-Z_a-z0-9]+)\\s*" "(?:\\{|:\\s*public\\s+([A-Z_a-z0-9]+))" ); } else if ( language->currentText() == "Java" ) { fileNameFilter = "*.java"; classDef.setPattern( "\\bclass\\s+([A-Z_a-z0-9]+)\\s+extends\\s*" "([A-Z_a-z0-9]+)" ); } dict.clear(); listView->clear(); for ( int i = 0; i < searchPathBox->count(); i++ ) { QDir dir = searchPathBox->text( i ); QStringList names = dir.entryList( fileNameFilter ); for ( int j = 0; j < names.count(); j++ ) { QFile file( dir.filePath(names[j]) ); if ( file.open(IO_ReadOnly) ) { QString content = file.readAll(); int k = 0; while ( (k = classDef.search(content, k)) != -1 ) { processClassDef( classDef.cap(1), classDef.cap(2), names[j] ); k++; } } } } } void ClassHierarchy::processClassDef( const QString& derived, const QString& base, const QString& sourceFile ) { QListViewItem *derivedItem = insertClass( derived, sourceFile ); if ( !base.isEmpty() ) { QListViewItem *baseItem = insertClass( base, "" ); if ( derivedItem->parent() == 0 ) { listView->takeItem( derivedItem ); baseItem->insertItem( derivedItem ); derivedItem->setText( 1, sourceFile ); } } } QListViewItem *ClassHierarchy::insertClass( const QString& name, const QString& sourceFile ) { if ( dict[name] == 0 ) { QListViewItem *item = new QListViewItem( listView, name, sourceFile ); item->setOpen( true ); dict.insert( name, item ); } return dict[name]; }QT Designer¿¡ °üÇÑ ³»¿ëÀº http://doc.trolltech.com/3.1/designer-manual.html ¸¦ Âü°íÇϱ⠹ٶõ´Ù. 8 2D¿Í 3D ±×·¡ÇÈ
QT´Â 2D¿Í 3D ±×·¡ÇÈÀ» Áö¿øÇÑ´Ù. QTÀÇ 2D±×·¡ÇȰü·Ã Ŭ·¡½ºµéÀº bitmap°ú vector ±×·¡ÇÈÀ» Áö¿øÇÑ´Ù. ¶ÇÇÑ ¾Ö´Ï¸ÞÀ̼ǰú Ãæµ¹°ËÃâ(collision detection)°ú °°Àº °Íµé ¿ª½Ã Áö¿øÇÑ´Ù. 3D¸¦ À§Çؼ´Â OpenGLÀ» ÀÌ¿ëÇÔÀ¸·Î½á Ç÷§Æû¿¡ Á¾¼ÓÀûÀÌÁö ¾ÊÀº ±×·¡ÇȰü·Ã ÇÁ·Î±×·¥ÀÇ °³¹ßÀÌ °¡´ÉÇÏ´Ù. 8.1 2D ±×·¡ÇÈImagesQImage Ŭ·¡½º´Â BMP, GIF, JPEG, MING, PNG, PNM, XBM, XPM°ú °°Àº ´Ù¾çÇÑ À̹ÌÁö Æ÷Ĺ¿¡ ´ëÇÑ ÀÔ·Â/Ãâ·Â°ú ÆíÁý±â´ÉÀ» Á¦°øÇÑ´Ù.
¸¹Àº QTÀÇ ³»ÀåÀ§Á¬µéÀÌ À̹ÌÁö¸¦ Ãâ·ÂÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î ¹öÅÏ, ¶óº§, ¸Þ´º ¾ÆÀÌÅÛµîÀÌ ±×°ÍÀε¥, »ç¿ëÀÚ¿¡°Ô Á»´õ Á÷°üÀûÀΠȯ°æÀ» Á¦°øÇϱâ À§Çؼ À̹ÌÁö¸¦ Ãâ·ÂÇÒ ¼öµµ ÀÖ´Ù. QPushButton *button = new QPushButton( "&Find Address", parent ); button->setIconSet( QIconSet(QImage("find.bmp")) ); <img src=http://www.trolltech.com/products/qt/whitepaper/icon.png>
QImage´Â 1, 8, 32 ºñÆ®ÀÇ »ö»óÀ» Áö¿øÇÑ´Ù. ÇÁ·Î±×·¡¸Ó´Â ÇÈ»ø°ú ÆÈ·¿Æ® µ¥ÀÌÅ͸¦ ¼öÁ¤ÇÒ ¼ö ÀÖÀ¸¸ç, ȸÀü, º¯Çü, »ö»óÁÙÀ̱â¿Í °°Àº ÀÛ¾÷À» ÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ alpha ä³ÎÀ» ÀÌ¿ëÇØ¼ alpha-blending¿Í Åõ¸í¹è°æ°ú °°Àº °ÍµéÀÇ ±¸Çöµµ °¡´ÉÇÏ´Ù.
QMovieŬ·¡½º¸¦ ÀÌ¿ëÇÏ¸é ¾Ö´Ï¸ÞÀÌ¼Ç À̹ÌÁö¸¦ Ç÷¹ÀÌ ÇÒ ¼öµµ ÀÖ´Ù. PaintingQPainterÀº Ç÷§Æû µ¶¸³ÀûÀÎ ÆÐÀÎÆÃ À§Á¬À» À§ÇÑ API¸¦ Á¦°øÇÑ´Ù. ±âº»ÀûÀÎ ÆÐÀÎÆÃ °ü·Ã ±â´É¿Ü¿¡µµ º¯È¯(transformation)°ú ÀÚ¸£±â(clipping)¿Í °°Àº ¹ßÀüµÈ ±â´Éµµ Á¦°øÇÑ´Ù. ¸ðµç QT ³»Àå À§Á¬Àº QPainterÀ» ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù. ÇÁ·Î±×·¡¸Ó°¡ ÀÚ½ÅÀÇ À§Á¬À» ¸¸µé ¶§µµ QPinaterÀº À¯¿ëÇÏ°Ô »ç¿ëµÈ´Ù.
QPainterÀº Á¡,¼±,´Ù°¢Çü,¿ø,º£Áö¾î °î¼±µîÀ» ±×¸®±â À§ÇÑ Ç¥ÁØÀûÀÎ ÇÔ¼ö¸¦ Á¦°øÇÑ´Ù. ¸¸¾à 2-pixelÀÇ µÎ±ú¸¦ °¡Áö´Â »¡°£ ¼±À¸·Î ÀÌ·ç¾îÁø 120 x 60 Å©±âÀÇ »ç°¢ÇüÀ» 25,15 ÁÂÇ¥¿¡ ±×¸®°í ½Í´Ù¸é ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µÈ´Ù. painter.setPen( QPen(red, 2, DashLine) ); painter.drawRect( 25, 15, 120, 60 );±âº»ÀûÀ¸·Î À§Á¬¿¡¼ ±âÁØÀÌ µÇ´ÂÁöÁ¡Àº ¿ÞÂÊ À§·Î 0,0ÁÂÇ¥°¡ µÈ´Ù. ¹Ý´ëÀÇ ¿À¸¥ÂÊ ¾Æ·¡ ÁÂÇ¥´Â witdh()-1, height()-1ÀÌ µÈ´Ù.
´ÙÀ½Àº bar-graph »ç¿ëÀÚ À§Á¬À» À§ÇÑ ÄÚµå´Ù. ÄÚµå´Â QPainterÀÇ paintEvent()¸¦ ÀÌ¿ëÇØ¼ ¸¸µé¾î Á³´Ù. void BarGraph::paintEvent( QPaintEvent * ) { QPainter painter( this ); draw_bar( &painter, 0, 39, Qt::DiagCrossPattern ); draw_bar( &painter, 1, 31, Qt::BDiagPattern ); draw_bar( &painter, 2, 44, Qt::FDiagPattern ); draw_bar( &painter, 3, 68, Qt::SolidPattern ); painter.setPen( black ); painter.drawLine( 0, 0, 0, height() - 1 ); painter.drawLine( 0, height() - 1, width() - 1, height() - 1 ); painter.setFont( QFont("Helvetica", 18) ); painter.drawText( rect(), AlignHCenter | AlignTop, "Sales" ); } void BarGraph::draw_bar( QPainter *painter, int month, int barHeight, BrushStyle pattern ) { painter->setPen( blue ); painter->setBrush( QBrush(darkGreen, pattern) ); painter->drawRect( 10 + 30 * month, height() - barHeight, 20, barHeight ); }
ÀÌ À§Á¬Àº width(), height()¸¦ ÀÌ¿ëÇØ¼ ÁÂÇ¥¸¦ °áÁ¤ÇϹǷΠÀ©µµ¿ìÀÇ Å©±â°¡ º¯ÇÏ´õ¶óµµ Á¤È®ÇÏ°Ô Ç¥ÇöµÈ´Ù.
QPainter´Â ÇÕÁýÇÕ(uniting), ±³ÁýÇÕ(intersection), Â÷ÁýÇÕ(subtractin), XOR µîÀ» Áö¿øÇϸç À̰ÍÀ» ÀÌ¿ëÇϸé, »ç°¢Çü, ¿ø, ºñÆ®¸Êµé°£ÀÇ °ãÄ¡´Â ºÎºÐ¿¡ ´ëÇÑ ¼Õ½¬¿î Ç¥ÇöÀÌ °¡´ÉÇØ Áø´Ù. Paing Devices8.2 3D ±×·¡ÇÈ
OpenGLÀº 3D ÇÁ·Î±×·¡¹ÖÀ» À§ÇÑ Ç¥ÁØ API´Ù. QT´Â QWidgetÀÇ ¼ºê À§Á¬ÀÎ QGLWidgetÀ» Á¦°øÇϴµ¥ À̰ÍÀ» ÀÌ¿ëÇØ¼ 3D ±×·¡ÇÈÀ» Áö¿øÇÏ´Â ¾ÖÇø®ÄÉÀ̼ÇÀ» Á¦ÀÛÇÒ ¼ö ÀÖ´Ù.
QTÀÇ OpengGL ¸ðµâÀº Windows, X11, Macintosh ÀÇ ½Ã½ºÅÛÀÌ Á¦°øÇÏ´Â OpenGL¶óÀ̺귯¸®(¶Ç´Â Mesa)¸¦ ÀÌ¿ëÇØ¼ ÀÌ·¯ÇÑ 3D¸¦ Áö¿øÇÑ´Ù. <img src=http://www.trolltech.com/products/qt/whitepaper/brain-innovation.png>
´ÙÀ½Àº QT¸¦ ÀÌ¿ëÇÑ 3D ±×·¡ÇÈ ¿¹Á¦´Ù.
´ÙÀ½Àº ¿¹Á¦¸¦ À§ÇÑ ¿ÏÀüÇÑ ÄÚµå´Ù. ÀÌ ÇÁ·Î±×·¥Àº 3D »óÀÚ¸¦ ±×¸®´Âµ¥, 3°³ÀÇ ½½¶óÀÌµå ¹Ù¸¦ ÀÌ¿ëÇØ¼ ¹Ú½º¸¦ X, Y, ZÃàÀ¸·Î ȸÀü ½Ãų ¼ö ÀÖ´Ù.
´ÙÀ½Àº box3d.h ÆÄÀÏÀÌ´Ù. #include <qgl.h>
class Box3D : public QGLWidget
{
Q_OBJECT
public:
Box3D( QWidget *parent = 0, const char *name = 0 );
~Box3D();
public slots:
void setRotationX( int deg ) { rotX = deg; updateGL(); }
void setRotationY( int deg ) { rotY = deg; updateGL(); }
void setRotationZ( int deg ) { rotZ = deg; updateGL(); }
protected:
virtual void initializeGL();
virtual void paintGL();
virtual void resizeGL( int w, int h );
virtual GLuint makeObject();
private:
GLuint object;
GLfloat rotX, rotY, rotZ;
};
´ÙÀ½Àº box3d.cpp ÆÄÀÏ·Î box3d.h¿¡ ¼±¾ðµÈ ¼±¾ðµÈ ÇÔ¼öµéÀÇ Á¤Àǰ¡ µÇ¾î ÀÖ´Ù. #include "box3d.h" Box3D::Box3D( QWidget *parent, const char *name ) : QGLWidget( parent, name ) { object = 0; rotX = rotY = rotZ = 0.0; } Box3D::~Box3D() { makeCurrent(); glDeleteLists( object, 1 ); } void Box3D::initializeGL() { qglClearColor( darkBlue ); object = makeObject(); glShadeModel( GL_FLAT ); } void Box3D::paintGL() { glClear( GL_COLOR_BUFFER_BIT ); glLoadIdentity(); glTranslatef( 0.0, 0.0, -10.0 ); glRotatef( rotX, 1.0, 0.0, 0.0 ); glRotatef( rotY, 0.0, 1.0, 0.0 ); glRotatef( rotZ, 0.0, 0.0, 1.0 ); glCallList( object ); } void Box3D::resizeGL( int w, int h ) { glViewport( 0, 0, w, h ); glMatrixMode( GL_PROJECTION ); glLoadIdentity(); glFrustum( -1.0, 1.0, -1.0, 1.0, 5.0, 15.0 ); glMatrixMode( GL_MODELVIEW ); } GLuint Box3D::makeObject() { GLuint list = glGenLists( 1 ); glNewList( list, GL_COMPILE ); qglColor( yellow ); glLineWidth( 2.0 ); glBegin( GL_LINE_LOOP ); glVertex3f( +1.5, +1.0, +0.8 ); glVertex3f( +1.5, +1.0, -0.8 ); /* ... */ glEnd(); glEndList(); return list; }
´ÙÀ½Àº main.cpp ÆÄÀÏ·Î Box3DÀÇ ÀνºÅϽº¸¦ »ý¼ºÇÑ´Ù. #include <qapplication.h> #include <qslider.h> #include <qvbox.h> #include "box3d.h" void create_slider( QWidget *parent, Box3D *box3d, const char *slot ) { QSlider *slider = new QSlider( 0, 360, 60, 0, QSlider::Horizontal, parent ); slider->setTickmarks( QSlider::Below ); QObject::connect( slider, SIGNAL(valueChanged(int)), box3d, slot ); } int main( int argc, char **argv ) { QApplication::setColorSpec( QApplication::CustomColor ); QApplication app( argc, argv ); if ( !QGLFormat::hasOpenGL() ) qFatal( "This system has no OpenGL support" ); QVBox *parent = new QVBox; parent->setCaption( "OpenGL Box" ); parent->setMargin( 11 ); parent->setSpacing( 6 ); Box3D *box3d = new Box3D( parent ); create_slider( parent, box3d, SLOT(setRotationX(int)) ); create_slider( parent, box3d, SLOT(setRotationY(int)) ); create_slider( parent, box3d, SLOT(setRotationZ(int)) ); app.setMainWidget( parent ); parent->resize( 250, 250 ); parent->show(); return app.exec(); } 9 Database
QT SQL¸ðµâÀº ´ÙÁß Ç÷§Æû¿¡¼ SQL µ¥ÀÌÅͺ£À̽º¸¦ ¾×¼¼½ºÇϱâ À§ÇÑ ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÑ´Ù. QT´Â Oracle, Microsoft SQL ¼¹ö, Sysbase Adaptive Server, PostgreSQL, MySQL, ODBC¸¦ À§ÇÑ µå¶óÀ̹ö¸¦ Æ÷ÇÔÇϰí ÀÖ´Ù. ÀÌ µå¶óÀ̹öµéÀº Ç÷§Æû¿¡ °ü°è¾øÀÌ QT´Â ¹°·ÐÀÌ°í ´Ù¸¥ ¶óÀ̺귯¸®ÀÀ¿ëÀ» À§Çؼµµ »ç¿ë°¡´ÉÇÏ´Ù.
ÇÁ·Î±×·¡¸Ó´Â SQLÀ» ½±°Ô ¿¢¼¼½ºÇÒ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. QT´Â C++ÀÎÅÍÆäÀ̽º¸¦ ÀÌ¿ëÇØ¼ ³ôÀº ¼öÁØ¿¡¼ ½±°Ô SQLÀ» ´Ù·ê ¼ö ÀÖµµ·Ï ÀϹÝÀûÀÎ »ç¿ë¹ýÀ» Á¦°øÇÑ´Ù.
Cache Error |
|
|
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|