3. ±âÁ¸ÀÇ WidgetÀ¸·ÎºÎÅÍ »õ·Î¿î ±â´ÉÀÇ Widget »ý¼º : Qt¿¡¼­ Á¦°øµÇ´Â ±âº» widgetµéÀº °­·ÂÇϳª ±×·¯ÇÑ widgetµé¿¡ Ãß°¡ÀûÀÎ ±â´ÉÀ» »ðÀÔÇÏ¿© È®ÀåÇϰųª ¿©·¯ ±âº»ÀûÀÎ widgetÀ» Á¶ÇÕÇÏ¿© »õ·Î¿î ÀÇ¹Ì¿Í ±â´ÉÀ» âÃâÇØ¾ß ÇÏ´Â °æ¿ìµµ ÀÖ½À´Ï´Ù. À̹ø¿¡´Â ±âÁ¸ÀÇ widgetÀ» »ó¼Ó¹Þ¾Æ ±â´ÉÀ» È®ÀåÇؼ­ »õ·Î¿î widgetÀ» »ý¼ºÇÏ´Â ¿¹¸¦ »ìÆ캸µµ·Ï ÇÏ°Ú½À´Ï´Ù. QFileDialog¸¦ »ó¼Ó¹ÞÀº Ŭ·¡½º¸¦ Á¤ÀÇÇÏ°í ±× ³»ºÎ¿¡ ÆÄÀÏÀÇ ³»¿ëÀ» ÅؽºÆ®·Î º¸¿©ÁÖ´Â ´ÙÀ̾ó·Î±×¹Ú½º¸¦ Ãß°¡Çغ¸µµ·Ï ÇÏ°Ú½À´Ï´Ù. attachment:QTProgrammingCreateNewWidget/s31_2.jpg ±¸ÇöÇÏ·Á´Â ±â´ÉÀº ´ÙÀ½°ú °°½À´Ï´Ù. 1.ÆÄÀÏ´ÙÀ̾ó·Î±×¿¡¼­ ÆÄÀÏÀ» Ŭ¸¯ÇÒ °æ¿ì ¹ß»ýÇÏ´Â °æ¿ì ¼±ÅÃµÈ ÆÄÀÏÀÇ µ¥ÀÌÅ͸¦ Àоî ÆÄÀÏ ´ÙÀ̾ó·Î±×ÀÇ À§³ª ¾Æ·¡¿¡ ÅؽºÆ®Ã¢À» »ý¼ºÇÏ°í ±× ¾È¿¡ Ãâ·ÂÇÕ´Ï´Ù. 2.ÆÄÀÏ´ÙÀ̾ó·Î±×ÀÇ À§Ä¡¿¡ µû¶ó ÅؽºÆ®Ã¢ÀÇ À§Ä¡¸¦ ÆÄÀÏ´ÙÀ̾ó·Î±×ÀÇ À§³ª ¾Æ·¡·Î Á¶Á¤ÇÕ´Ï´Ù. ÇØ´ç ±â´ÉÀ» ±¸ÇöÇϱâ À§ÇØ QFileDialog·ÎºÎÅÍ »ó¼Ó¹Þ´Â TextPreviewFileDialog Ŭ·¡½º¸¦ Á¤ÀÇÇÕ´Ï´Ù. {{{ //----------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------- // textpreviewfiledialog.h : TextPreviewFileDialog Ŭ·¡½º ¼±¾ðºÎ //----------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------- #ifndef _textpreviewfiledialog_h_ #define _textpreviewfiledialog_h_ #include < qdialog.h > #include < qfiledialog.h > #include < qtextedit.h > class TextPreviewFileDialog : public QFileDialog { Q_OBJECT public : //----------------------------------------------------------------------------------------------------- // member variables : //----------------------------------------------------------------------------------------------------- QDialog* m_pPreviewPopup; //Preview Dialog QTextEdit* m_pTextEdit; //Preview Dialog¿¡ ³ÖÀ» TextEdit ÄÁÆ®·Ñ //----------------------------------------------------------------------------------------------------- // member functions : //----------------------------------------------------------------------------------------------------- //constructor/destructor TextPreviewFileDialog(QWidget* pQParentWidget); //default constructor ~TextPreviewFileDialog(); //event handlers : void moveEvent ( QMoveEvent * pMoveEvent); void resizeEvent ( QResizeEvent * pResizeEvent ); //custom logic unit : void reform_preview_dialog(); public slots : void handler_filehighlighted(const QString& text); }; #endif //----------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------- }}} Qt Designer¿¡¼­´Â Signal/SlotÀÇ ConnectionÀ» Á÷Á¢ »ý¼ºÇØÁÖÁö¸¸ Á÷Á¢ widgetÀ» ¸¸µé ¶§¿¡´Â connect() ¿¡ ÀÇÇØ ¿¬°áÇÑ SlotÇÔ¼ö¸¦ Á÷Á¢ ¼±¾ðÇØÁÖ¾î¾ß ÇÕ´Ï´Ù. SlotÇÔ¼ö¸¦ ¼±¾ðÇϱâ À§Çؼ­´Â 1. Ŭ·¡½º óÀ½¿¡ Q_OBJECT ¶ó´Â ÅؽºÆ®¸¦ ¸í½ÃÇÕ´Ï´Ù. 2. slotÇÔ¼ö ¼±¾ð Àü¿¡ slots Áö½ÃÀÚ¸¦ ¸í½ÃÇÕ´Ï´Ù.( ex) public slots: ) ÀÌ·± ¼ö¼øÀ» °ÅÃÄ ¼±¾ðÇÏ¸é µË´Ï´Ù. slotÇÔ¼öÀÇ ±¸ÇöÀº ÀϹÝÀûÀÎ ¸â¹ö ÇÔ¼öÀÇ ±¸Çö°ú Â÷ÀÌ°¡ ¾ø½À´Ï´Ù. {{{ //----------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------- // textpreviewfiledialog.cpp : TextPreviewFileDialog Ŭ·¡½º ±¸ÇöºÎ //----------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------- #include "textpreviewfiledialog.h" #include < qtextcodec.h > #include < qmessagebox.h > #include < qdesktopwidget.h > #include < qrect.h > #include < qapplication.h > TextPreviewFileDialog::TextPreviewFileDialog(QWidget* pQParentWidget) { //º¯¼ö ÃʱâÈ­ m_pPreviewPopup = NULL; m_pTextEdit = NULL; //Signal/Slot¿¬°á( ÆÄÀÏ ´ÙÀ̾ó·Î±×¿¡¼­ ÆÄÀÏ Ç׸ñÀ» ¼±ÅÃÇÒ¶§¸¶´Ù ÇÔ¼ö¸¦ È£ÃâÇϵµ·Ï ¼³Á¤ÇÑ´Ù.) connect( this , SIGNAL( fileHighlighted(const QString&) ), this , SLOT(handler_filehighlighted(const QString&) ) ); } //------------------------------------------------------------------------------------------------------------------- // void handler_filehighlighted(const QString& text) : // ÆÄÀÏ´ÙÀ̾ó·Î±×¿¡¼­ ÆÄÀÏ Ç׸ñÀ» Ŭ¸¯ÇÒ¶§¸¶´Ù È£ÃâµÇ´Â SlotÇÔ¼öÀÌ´Ù. //------------------------------------------------------------------------------------------------------------------- void TextPreviewFileDialog::handler_filehighlighted(const QString& text) { //------------------------------------------------------------------------------------------------------------------- //local variables : //------------------------------------------------------------------------------------------------------------------- QFile qfile; QByteArray qByteArray; QTextCodec* pQTC = NULL; //------------------------------------------------------------------------------------------------------------------- if( this->selectedFile()=="" ) { if(m_pPreviewPopup != NULL ) { m_pPreviewPopup->hide(); } return; } pQTC = QTextCodec::codecForName("utf8"); if( pQTC == NULL ) { return; } qfile.setName( this->selectedFile() ); if( qfile.open(IO_ReadOnly) ) //ÆÄÀÏÀ» Àбâ Àü¿ëÀ¸·Î ¿¬´Ù. { /* * ÀÌ ±¸Çö¿¡¼­´Â Åë°·Î ´Ù Àо ºÙ¿©³Ö¾úÁö¸¸, * ¹Ì¸® º¼ ¾çÀ» ÀûÀýÈ÷ Á¶ÀýÇؼ­ »ç¿ëÇÒ ¼ö ÀÖ´Ù. */ qByteArray = qfile.readAll(); //ÆÄÀÏÀ» ÀоîµéÀδÙ. if( qByteArray.count() > 0 ) { if( m_pPreviewPopup == NULL ) { m_pPreviewPopup = new QDialog( this ); m_pTextEdit = new QTextEdit( m_pPreviewPopup ); } reform_preview_dialog(); m_pTextEdit->setText( pQTC->toUnicode( qByteArray , qByteArray.count() ) ); m_pPreviewPopup->setCaption( this->selectedFile() ); m_pPreviewPopup->showNormal(); } else { m_pTextEdit->setText(""); } } return; } void TextPreviewFileDialog::moveEvent ( QMoveEvent * pMoveEvent) { reform_preview_dialog(); } //------------------------------------------------------------------------------------------------------------------- //void reform_preview_dialog() : //ÆÄÀÏ´ÙÀ̾ó·Î±×¿¡ ¸ÂÃß¾î Preview ´ÙÀ̾ó·Î±×¸¦ »ý¼º //------------------------------------------------------------------------------------------------------------------- void TextPreviewFileDialog::reform_preview_dialog() { QRect rect; QDesktopWidget* pMainDesktop = QApplication::desktop(); //µ¥½ºÅ©Å¾ È­¸éÀ» ¾ò´Â´Ù. if( m_pPreviewPopup == NULL ) return; rect = pMainDesktop->screenGeometry(); //È­¸é »çÀÌÁ ¾ò´Â´Ù. /* * Qt Assistance¿¡ ÀÇÇϸé QWidget::frameGeometry()·Î ÇÁ·¹ÀÓÀ» Æ÷ÇÔÇÑ Àüü À©µµ¿ì »çÀÌÁ * ±¸ÇÒ ¼ö ÀÖ´Â °ÍÀ¸·Î µÇ¾î ÀÖÁö¸¸ ½ÇÁ¦·Î´Â frameGeometry()¿Í geometry()°¡ µ¿ÀÏÇÑ °ªÀÇ QRect * °´Ã¼¸¦ ¹ÝȯÇÑ´Ù. * * ¿©±â¿¡¼­´Â ƯÁ¤ »ó¼ö¸¦ °¡°¨ÇÏ´Â °ÍÀ¸·Î Àӽ÷Π±¸ÇöÇÏ¿´´Ù. */ if( (rect.height() - ( this->y()+this->frameGeometry().height() )) < this->frameGeometry().height() ) { //À§·Î previewÈ­¸éÀ» Ãâ·ÂÇÑ´Ù. m_pPreviewPopup->setGeometry( this->x() , this->y() - this->frameGeometry().height() - 30 , this->width(), this->height() ); } else { //¾Æ·¡·Î previewÈ­¸éÀ» Ãâ·ÂÇÑ´Ù. m_pPreviewPopup->setGeometry( this->x() , this->y() + this->frameGeometry().height() + 30 , this->width(), this->height() ); } //³»ºÎ ÅؽºÆ®¹Ú½ºÀÇ »çÀÌÁ ÀçÁ¶Á¤ÇÑ´Ù. m_pTextEdit->setGeometry(0,0,m_pPreviewPopup->width() , m_pPreviewPopup->height() ); } void TextPreviewFileDialog::resizeEvent ( QResizeEvent * pResizeEvent ) { reform_preview_dialog(); } TextPreviewFileDialog::~TextPreviewFileDialog() { } //----------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------- }}} ¹Ì¸® Á¤ÀÇµÈ À̺¥Æ®¿¡ ´ëÇÑ Çڵ鷯´Â virtual·Î Á¤ÀǵǾî ÀÖ´Â À̺¥Æ®Çڵ鷯 ÇÔ¼ö¸¦ ÀçÁ¤ÀÇÇÏ´Â °Í¸¸À¸·Îµµ °£´ÜÇÏ°Ô ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. À§ ÄÚµåÀÇ moveEvent() ÇÔ¼ö°¡ À̺¥Æ® ¹ß»ý½Ã¿¡ È£ÃâµË´Ï´Ù. ¹Ì¸® Á¤ÀǵǾî ÀÖ´Â À̺¥Æ®´Â Qt Assistance¿¡¼­ È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù. À̺¥Æ® Çڵ鷯ÀÇ À̸§Àº ´ë°³ XXXevent()·Î Á¤ÀǵǾî ÀÖ½À´Ï´Ù. »ý¼ºÀÚ¿¡¼­ connect¸¦ ÀÌ¿ëÇؼ­ QFileDialogÀÇ fileHighlighted() signalÀ» handler_filehighlighted()¿¡ ¿¬°áÇÏ´Â °ÍÀ» È®ÀÎÇϼ¼¿ä. »ç¿ëÇϱâ À§Çؼ­´Â modal dialog»ý¼ºÇϵíÀÌ »ç¿ëÇÏ¸é µË´Ï´Ù. {{{ void Form_Main::pushButton_show_clicked() { TextPreviewFileDialog dlg(this); dlg.exec(); } }}} °á°úÈ­¸é attachment:QTProgrammingCreateNewWidget/s32_1.jpg