· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
QT Programming Create New Widget

3. ±âÁ¸ÀÇ WidgetÀ¸·ÎºÎÅÍ »õ·Î¿î ±â´ÉÀÇ Widget »ý¼º :



Qt¿¡¼­ Á¦°øµÇ´Â ±âº» widgetµéÀº °­·ÂÇϳª ±×·¯ÇÑ widgetµé¿¡ Ãß°¡ÀûÀÎ ±â´ÉÀ» »ðÀÔÇÏ¿© È®ÀåÇϰųª ¿©·¯ ±âº»ÀûÀÎ widgetÀ» Á¶ÇÕÇÏ¿© »õ·Î¿î ÀÇ¹Ì¿Í ±â´ÉÀ» âÃâÇØ¾ß ÇÏ´Â °æ¿ìµµ ÀÖ½À´Ï´Ù. À̹ø¿¡´Â ±âÁ¸ÀÇ widgetÀ» »ó¼Ó¹Þ¾Æ ±â´ÉÀ» È®ÀåÇؼ­ »õ·Î¿î widgetÀ» »ý¼ºÇÏ´Â ¿¹¸¦ »ìÆ캸µµ·Ï ÇÏ°Ú½À´Ï´Ù. QFileDialog¸¦ »ó¼Ó¹ÞÀº Ŭ·¡½º¸¦ Á¤ÀÇÇÏ°í ±× ³»ºÎ¿¡ ÆÄÀÏÀÇ ³»¿ëÀ» ÅؽºÆ®·Î º¸¿©ÁÖ´Â ´ÙÀ̾ó·Î±×¹Ú½º¸¦ Ãß°¡Çغ¸µµ·Ï ÇÏ°Ú½À´Ï´Ù.


s31_2.jpg
[JPG image (79.11 KB)]



±¸ÇöÇÏ·Á´Â ±â´ÉÀº ´ÙÀ½°ú °°½À´Ï´Ù.

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




°á°úÈ­¸é

s32_1.jpg
[JPG image (53.01 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:08:10
Processing time 0.0054 sec