½Ç½À ¿¹Á¦ : °£´ÜÇÑ ÅؽºÆ® ÆíÁý±â ÀÛ¼º ÅؽºÆ® ÆÄÀÏÀ» Àоîµé¿© QTextEdit¿¡ ¾²°í ÅؽºÆ®¸¦ ÆÄÀÏ·Î ÀúÀåÇÏ´Â ±â´ÉÀ» ±¸ÇöÇÕ´Ï´Ù. attachment:QTProgrammingSimpleEditor/s33.jpg QDialog¿¡ QTextEdit ÄÁÆ®·Ñ°ú Spacer¸¦ ÀÌ¿ëÇÏ¿© µðÀÚÀÎÇÕ´Ï´Ù. Spacer¿Í QTextEditÀ» À§¿¡¼­ºÎÅÍ ¼ø¼­´ë·Î Ãß°¡ÇÑ ÈÄ FormÀ» ¼±ÅÃÇÑ »óÅ¿¡¼­ ¸Þ´ºÀÇ Layout->Lay out vertically¸¦ ¼±ÅÃÇÏ¿© Á¤·ÄÇÕ´Ï´Ù. spacer´Â ÀÏÁ¾ÀÇ ¹öÆÀ¸ñ °°Àº °ÍÀ¸·Î ÀÏÁ¤°ø°£À» È®º¸Çϱâ À§ÇØ Ãß°¡ÇÏ´Â ÄÁÆ®·ÑÀÔ´Ï´Ù. ¿©±â¿¡¼­´Â µ¿ÀûÀ¸·Î »ý¼ºÇÒ QMenuBarÀÇ °ø°£À» È®º¸Çϱâ À§ÇØ »ç¿ëÇÕ´Ï´Ù. Form»ý¼º½Ã¿¡ ¸Þ´º¹Ù¸¦ »ý¼ºÇÏ°í SpacerÀÇ Å©±â¸¦ ÀçÁ¶Á¤Çϵµ·Ï ÇÕ´Ï´Ù. {{{ void Form_Main::Initialize() { //--------------------------------------------------------------------------------------------------- //local variables : //--------------------------------------------------------------------------------------------------- QMenuBar* pMenuBar = NULL; QPopupMenu *pPopupMenu = NULL; QRect rect; //--------------------------------------------------------------------------------------------------- // // ¸ÞÀÎ ¸Þ´º¸¦ Ãß°¡ÇÑ´Ù. // pMenuBar = new QMenuBar(this , NULL); //¸Þ´º ¹Ù °´Ã¼¸¦ »ý¼ºÇÑ´Ù. rect = pMenuBar->geometry(); //¸Þ´º ¹ÙÀÇ Å©±â¸¦ ±¸ÇÑ´Ù. spacer_menu->changeSize( rect.width() , rect.height() ); //spacerÀÇ Å©±â¸¦ ¸Þ´º ¹ÙÀÇ Å©±â·Î ÇÑ´Ù. this->repaint(true); //À©µµ¿ì¸¦ ´Ù½Ã ±×¸°´Ù. /* *¸Þ´º ¹ÙÀÇ ¸Þ´º ±¸¼ºÀº Æ˾÷ ¸Þ´ºµéÀÇ ÁýÇÕÀ¸·Î ³ªÅ¸³ª´Ù. QPopupMenu°´Ã¼¸¦ »ý¼ºÇÑ ÈÄ QPopupMenu °´Ã¼¿¡ *¸Þ´º ¾ÆÀÌÅÛ(Ç׸ñ)À» Ãß°¡ÇÑ ÈÄ QMenuBar¿¡ QPopupMenu°´Ã¼¸¦ Ãß°¡ÇÏ¸é µÈ´Ù. */ //"File" ¸Þ´º »ý¼º pPopupMenu = new QPopupMenu; pPopupMenu->insertItem("&New" , this , SLOT( menuhandler_file_new() ) , CTRL+Key_N ); pPopupMenu->insertItem("&Open" , this , SLOT( menuhandler_file_open() ) , CTRL+Key_O ); pPopupMenu->insertItem("&Save" , this , SLOT( menuhandler_file_save() ) , CTRL+Key_S ); pMenuBar->insertItem("File" , pPopupMenu ); //»ý¼ºÇÑ Æ˾÷ ¸Þ´º¸¦ ¸Þ´º¹Ù¿¡ Ãß°¡ return; } }}} ¸Þ´º¹Ù¿¡ ¸Þ´ºÇ׸ñÀ» Ãß°¡ÇÏ´Â ºÎºÐÀ» È®ÀÎÇϼ¼¿ä. ÆÄÀÏÀÇ Àбâ¿Í ¾²±â ºÎºÐÀº ½º·¹µå Ŭ·¡½º¿Í ÁøÇà»çÇ×À» º¸¿©ÁÖ´Â ´ÙÀ̾ó·Î±×¹Ú½º¸¦ ÀÌ¿ëÇÏ¿© ±¸ÇöÇÏ¿´½À´Ï´Ù. {{{ void Form_Main::menuhandler_file_open() { //--------------------------------------------------------------------------------------------------- //local variables : //--------------------------------------------------------------------------------------------------- QOpenFileDialog openFileDialog; QString qstr , qstr2; QTextCodec* pQTC = NULL; FileLoadThread workerThread; Form_Progress form_progress(this ); //ó¸® »óŸ¦ Ç¥ÇöÇϱâ À§ÇÑ ¸Þ¼¼Áö ¹Ú½º int flags = 0; //--------------------------------------------------------------------------------------------------- pQTC = QTextCodec::codecForName("utf8"); if( pQTC == NULL ) { return; } flags = openFileDialog.exec(); //¿­ ÆÄÀÏÀ» ¼±ÅÃÇϱâ À§ÇÑ ´ÙÀ̾ó·Î±×¸¦ »ý¼ºÇÑ´Ù. if( flags == QOpenFileDialog::Accepted ) //open ¹öÆ°À» ´­·¶À» °æ¿ì { qstr = openFileDialog.selectedFile(); //ÆÄÀÏ ´ÙÀ̾ó·Î±×¹Ú½º¿¡ ÀúÀåµÈ ÆÄÀÏ À̸§(°æ·ÎÆ÷ÇÔ)À» ¾ò´Â´Ù. qstr2 = "ÆÄÀÏÀ» ¿©´Â ÁßÀÔ´Ï´Ù."; qstr2 = pQTC->toUnicode( qstr2 ); form_progress.Initialize(qstr , qstr2 ,&workerThread); //ÆÄÀÏÀ» ÀоîµéÀÌ´Â ½º·¹µå °´Ã¼¸¦ »ý¼ºÇÏ°í ½º·¹µå¸¦ ½ÇÇà½ÃŲ workerThread.set_FilePath(qstr); workerThread.start(); form_progress.exec(); if( workerThread.get_WorkFinished() > 0 ) { this->textEdit_main->setText( workerThread.get_LoadedTextString() ); } } else //cancel¹öÆ°À» ´­·¶À» °æ¿ì { return; } } }}} QFileDialog¸¦ »ó¼ÓÇÑ OpenFileDialog¸¦ ÀÌ¿ëÇÏ¿© ÆÄÀÏÀÇ °æ·Î¸¦ ¾ò½À´Ï´Ù. ÁøÇà°æ°ú¸¦ ³ªÅ¸³»´Â Form_Progress À©µµ¿ì¿¡¼­´Â ½ÇÁ¦·Î ÀÛ¾÷À» ó¸®ÇÏ´Â ½º·¹µå °´Ã¼ workerThread¿¡ ´ëÇÑ Æ÷ÀÎÅÍ ÂüÁ¶¸¦ ÀÌ¿ëÇÏ¿© ÀÛ¾÷ÀÌ ¾î´À Á¤µµ±îÁö ÁøÇàµÇ´ÂÁö È®ÀÎÇϸç Æû ¾ÈÀÇ QProgressBar¸¦ °»½ÅÇÕ´Ï´Ù. ÀÛ¾÷ÀÌ ¿Ï·áµÇ¸é workerThread->WorkFinished °ªÀ» È®ÀÎÇÏ°í Á¾·áµË´Ï´Ù. exec()·Î »ý¼ºµÈ ´ÙÀ̾ó·Î±×âÀº done()À» ÀÌ¿ëÇÏ¿© Á¾·áÇÏ´Â °ÍÀ» È®ÀÎÇϼ¼¿ä. {{{ #include < qmessagebox.h > #include < qpushbutton.h > #include "asyncworkerthread.h" void Form_Progress::Initialize(QString& qstr_FileName , QString& qstr_description ,AsyncWorkerThread* pAsyncWorkerThread) { QString qstr; qstr = "Loading "; qstr += qstr_FileName; this->setCaption( qstr ); this->textLabel_fileName->setText(qstr_FileName); this->m_pAsyncWorkerThread = pAsyncWorkerThread; this->textLabel_description->setText( qstr_description ); startTimer( 100 ); //setTimerÀÇ ´ÜÀ§´Â millisecond(1000ºÐÀÇ 1ÃÊ) } void Form_Progress::timerEvent( QTimerEvent* pEvent) { if( this->m_pAsyncWorkerThread->get_Percentage() >= 100 && this->m_pAsyncWorkerThread->get_WorkFinished() != 0 ) { this->progressBar_fileStoring->setProgress( m_pAsyncWorkerThread->get_Percentage() , 100); this->repaint(); usleep(100000); //ÁøÇà»çÇ×À» º¸¿©ÁÖ±â À§ÇØ »ì¦ ½®´Ù. this->done(0); //100ÀÌ µÇ¸é Á¾·á } else if( this->m_pAsyncWorkerThread->get_WorkFinished() < 0 ) { QMessageBox::critical( this , this->caption() , "ÀÛ¾÷ Áß ¿À·ù°¡ ¹ß»ýÇÏ¿´½À´Ï´Ù" ); return; } else { this->progressBar_fileStoring->setProgress( m_pAsyncWorkerThread->get_Percentage() , 100); return; } } }}} FileSaveThread¿Í FileOpenThread´Â AsyncWorkerThread¸¦ »ó¼Ó¹Þ¾Æ ±¸ÇöµÈ ÆÄÀÏÀ» ÀÐ°í ¾²´Â ÀÛ¾÷À» Çϴ Ŭ·¡½ºÀÔ´Ï´Ù. AsyncWorkerThread´Â QtÀÇ ½º·¹µå ±¸ÇöÀÎ QThread¸¦ »ó¼Ó¹Þ¾Æ ÀÛ¾÷ÀÇ ÁøÇà Á¤µµ¿Í ¼º°ø¿©ºÎ¸¦ Ç¥ÇöÇÒ ¼Ó¼ºÀ» Ãß°¡ÇÑ Å¬·¡½ºÀÔ´Ï´Ù. Qt¿¡¼­ ½º·¹µå¸¦ »ç¿ëÇϱâ À§Çؼ­´Â QThread¸¦ »ó¼Ó¹Þ´Â Ŭ·¡½º¸¦ Á¤ÀÇÇÑ ÈÄ QThread::run() ÇÔ¼ö¸¦ ÀçÁ¤ ÀÇÇÏ°í ±× ¾È¿¡ ½º·¹µå ·çƾÀ» ÀÛ¼ºÇؼ­ »ðÀÔÇÏ¸é µË´Ï´Ù. {{{ #ifndef _asyncworkderthread_h_ #define _asyncworkderthread_h_ #include < qthread.h > #define DEFINE_PROPERTY(type,property) type property;type get_##property(){return property;} void set_##property(type value){this->property=value;} class AsyncWorkerThread : public QThread { public: // //member variables : // //properties : DEFINE_PROPERTY(int,Percentage) DEFINE_PROPERTY(int,WorkFinished) // //member functions : // AsyncWorkerThread(); // »ý¼ºÀÚ virtual void run(); //»ó¼Ó¹Þ¾Æ¼­ ½ÇÁ¦·Î ó¸®ÇÒ ÀÏÀ» »ðÀÔÇÒ ÇÔ¼ö }; #endif }}} ½º·¹µå´Â QThread::start()ÇÔ¼ö¸¦ È£ÃâÇÔÀ¸·Î¼­ ½ÃÀ۵˴ϴÙ. Qt ³»ºÎ¿¡¼­ ¹®ÀÚ´Â utf8 Æ÷¸ËÀ¸·Î ÀÎÄÚµùµÇ¾î »ç¿ëµË´Ï´Ù. À̹ø ±¸Çö¿¡¼­´Â utf8 ÄÚµ¦À¸·Î ÅؽºÆ® ÆÄÀÏÀ» ÀоîµéÀÌ°í ÀúÀåÇÕ´Ï´Ù. ÆÄÀÏÀ» ÀоîµéÀÌ´Â ºÎºÐÀÔ´Ï´Ù. {{{ void FileLoadThread::run() { QFile qfile; QByteArray qByteArray; QTextCodec* pQTC = NULL; if( FilePath=="") { set_WorkFinished(-1); return; } pQTC = QTextCodec::codecForName("utf8"); if( pQTC == NULL ) { return; } qfile.setName( FilePath ); if( qfile.open(IO_ReadOnly) ) //ÆÄÀÏÀ» Àбâ Àü¿ëÀ¸·Î ¿¬´Ù. { /* *ÀÌ°÷¿¡¼­ ÆÄÀÏÀ» ÀÐ°í ¾²´Â ÀÏÀ» ó¸®ÇÑ´Ù. ÆÄÀÏÀÇ Å©±â¿¡ µû¶ó *ÀÏÁ¤·®À» ÀоîµéÀÎ ÈÄ set_Percentage()ÇÔ¼ö¸¦ ÀÌ¿ëÇؼ­ µ¥ÀÌÅ͸¦ ÀоîµéÀÎ ¾çÀ» *Ç¥½ÃÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. */ qByteArray = qfile.readAll(); //ÀÌ ±¸Çö¿¡¼­´Â Çѹø¿¡ ´Ù ÀоîµéÀδÙ. set_Percentage(50); //Àý¹ÝÀÌ µÈ°ÍÀ¸·Î Ç¥ÇöÇÑ´Ù. if( qByteArray.count() > 0 ) { set_LoadedTextString(pQTC->toUnicode( qByteArray , qByteArray.count() ) ); set_WorkFinished(1); } else { set_WorkFinished(-1); } set_Percentage(100); //Àбâ ÀÛ¾÷ÀÌ ¸ðµÎ ³¡³µ´Ù. } return; } }}} ÆÄÀÏÀ» ÀúÀåÇÏ´Â ºÎºÐÀÔ´Ï´Ù. {{{ void FileSaveThread::run() { QFile qfile; QTextCodec* pQTC; pQTC = QTextCodec::codecForName("utf8"); if( pQTC == NULL ) { return; } qfile.setName( get_FilePath() ); if( qfile.open( IO_WriteOnly ) ) { set_Percentage(0); QTextStream t(&qfile); t.setEncoding( QTextStream::UnicodeUTF8); t << DataString; qfile.close(); set_WorkFinished(1); set_Percentage(100); } } }}} µ¿ÀûÀÎ ¸Þ´º »ç¿ë ¹× ÅؽºÆ®ÀÇ Àбâ/¾²±â¸¦ ±¸ÇöÇÒ ¶§ À§ Äڵ带 ÂüÁ¶ÇϽñ⠹ٶø´Ï´Ù. ÃʱâÈ­¸é attachment:QTProgrammingSimpleEditor/s34.jpg FileDialog°¡ ¿­¸° ¸ð½À attachment:QTProgrammingSimpleEditor/s35.jpg ÆÄÀÏÀÌ ÀÐÈù ¸ð½À attachment:QTProgrammingSimpleEditor/s37.jpg