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




ID
Password
Join
The best prophet of the future is the past.


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