QT Programming Create New Widget
|
3. ±âÁ¸ÀÇ WidgetÀ¸·ÎºÎÅÍ »õ·Î¿î ±â´ÉÀÇ Widget »ý¼º :
Qt¿¡¼ Á¦°øµÇ´Â ±âº» widgetµéÀº °·ÂÇϳª ±×·¯ÇÑ widgetµé¿¡ Ãß°¡ÀûÀÎ ±â´ÉÀ» »ðÀÔÇÏ¿© È®ÀåÇϰųª ¿©·¯ ±âº»ÀûÀÎ widgetÀ» Á¶ÇÕÇÏ¿© »õ·Î¿î ÀÇ¹Ì¿Í ±â´ÉÀ» âÃâÇØ¾ß ÇÏ´Â °æ¿ìµµ ÀÖ½À´Ï´Ù.
À̹ø¿¡´Â ±âÁ¸ÀÇ widgetÀ» »ó¼Ó¹Þ¾Æ ±â´ÉÀ» È®ÀåÇØ¼ »õ·Î¿î widgetÀ» »ý¼ºÇÏ´Â ¿¹¸¦ »ìÆìº¸µµ·Ï ÇϰڽÀ´Ï´Ù.
QFileDialog¸¦ »ó¼Ó¹ÞÀº Ŭ·¡½º¸¦ Á¤ÀÇÇÏ°í ±× ³»ºÎ¿¡ ÆÄÀÏÀÇ ³»¿ëÀ» ÅØ½ºÆ®·Î º¸¿©ÁÖ´Â ´ÙÀ̾ó·Î±×¹Ú½º¸¦ Ãß°¡Çغ¸µµ·Ï ÇϰڽÀ´Ï´Ù.
![]() [JPG image (79.11 KB)] 1.ÆÄÀÏ´ÙÀ̾ó·Î±×¿¡¼ ÆÄÀÏÀ» Ŭ¸¯ÇÒ °æ¿ì ¹ß»ýÇÏ´Â °æ¿ì ¼±ÅÃµÈ ÆÄÀÏÀÇ µ¥ÀÌÅ͸¦ ÀÐ¾î ÆÄÀÏ ´ÙÀ̾ó·Î±×ÀÇ À§³ª ¾Æ·¡¿¡ ÅØ½ºÆ®Ã¢À» »ý¼ºÇÏ°í ±× ¾È¿¡ Ãâ·ÂÇÕ´Ï´Ù.
2.ÆÄÀÏ´ÙÀ̾ó·Î±×ÀÇ À§Ä¡¿¡ µû¶ó ÅØ½ºÆ®Ã¢ÀÇ À§Ä¡¸¦ ÆÄÀÏ´ÙÀ̾ó·Î±×ÀÇ À§³ª ¾Æ·¡·Î Á¶Á¤ÇÕ´Ï´Ù.
//-----------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------
// 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();
}
°á°úȸé
![]() [JPG image (53.01 KB)] |
Stop searching forever. Happiness is just next to you. |












