· 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)]



ID
Password
Join
You will have good luck and overcome many hardships.


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.0053 sec