· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
QT Programming Simple Editor


½Ç½À ¿¹Á¦ : °£´ÜÇÑ ÅؽºÆ® ÆíÁý±â ÀÛ¼º




ÅؽºÆ® ÆÄÀÏÀ» Àоîµé¿© QTextEdit¿¡ ¾²°í ÅؽºÆ®¸¦ ÆÄÀÏ·Î ÀúÀåÇÏ´Â ±â´ÉÀ» ±¸ÇöÇÕ´Ï´Ù.

s33.jpg
[JPG image (49.35 KB)]





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);
	}
}



µ¿ÀûÀÎ ¸Þ´º »ç¿ë ¹× ÅؽºÆ®ÀÇ Àбâ/¾²±â¸¦ ±¸ÇöÇÒ ¶§ À§ Äڵ带 ÂüÁ¶ÇϽñ⠹ٶø´Ï´Ù.



ÃʱâÈ­¸é

s34.jpg
[JPG image (13.25 KB)]


FileDialog°¡ ¿­¸° ¸ð½À

s35.jpg
[JPG image (55.72 KB)]



ÆÄÀÏÀÌ ÀÐÈù ¸ð½À

s37.jpg
[JPG image (46.51 KB)]





sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2007-11-11 18:42:25
Processing time 0.0059 sec