Advertisement
Guest User

Untitled

a guest
May 25th, 2012
382
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.99 KB | None | 0 0
  1. #ifndef resizeable_textedit_hpp_included
  2. #define resizeable_textedit_hpp_included
  3.  
  4. #include <QtGui>
  5.  
  6. class resizeable_textedit : public QTextEdit {
  7. Q_OBJECT
  8. public:
  9.   resizeable_textedit( QWidget* parent = 0 );
  10.  
  11. protected:
  12.   void paintEvent( QPaintEvent* event );
  13.   void mousePressEvent( QMouseEvent* event );
  14.   void mouseMoveEvent( QMouseEvent* event );
  15.   void mouseReleaseEvent( QMouseEvent* event );
  16.  
  17.   QSize sizeHint() const;
  18.   QSize minimumSizeHint() const;
  19.  
  20. private:
  21.   bool left_button_down_;
  22.   QPoint pos_at_down_;
  23.   QSize size_hint_;
  24. };
  25.  
  26. #endif
  27.  
  28. #include "resizeable_textedit.hpp"
  29.  
  30. resizeable_textedit::resizeable_textedit( QWidget* parent )
  31.   : QTextEdit( parent )
  32. {
  33.   left_button_down_ = false;
  34. }
  35.  
  36. void resizeable_textedit::paintEvent( QPaintEvent* event )
  37. {
  38.   QTextEdit::paintEvent( event );
  39.  
  40.   QPainter painter( viewport() );
  41.  
  42.   painter.setPen( Qt::lightGray );
  43.   painter.setBrush( QBrush( Qt::lightGray, Qt::SolidPattern ) );
  44.  
  45.   QRect region = viewport()->geometry();
  46.  
  47.   int x = region.bottomRight().x();
  48.   int y = region.bottomRight().y();
  49.  
  50.   const QPoint points[3] = {
  51.     QPoint( x, y ),
  52.     QPoint( x, y-15 ),
  53.     QPoint( x-15, y )
  54.   };
  55.  
  56.   painter.drawPolygon( points, 3 );
  57. }
  58.  
  59. void resizeable_textedit::mousePressEvent( QMouseEvent* event )
  60. {
  61.   if ( event->button() == Qt::LeftButton ) {
  62.     QApplication::setOverrideCursor( Qt::SizeVerCursor );
  63.     const QPoint pos = event->pos();
  64.     const QRect region = viewport()->geometry();
  65.    
  66.     if ( pos.x() >= region.bottomRight().x() - 15 &&
  67.          pos.y() >= region.bottomRight().y() - 15 ) {
  68.       left_button_down_ = true;
  69.       pos_at_down_ = pos;
  70.     }
  71.   }
  72. }
  73.  
  74. void resizeable_textedit::mouseReleaseEvent( QMouseEvent* event )
  75. {
  76.   QApplication::setOverrideCursor( Qt::ArrowCursor );
  77.   left_button_down_ = false;
  78. }
  79.  
  80. void resizeable_textedit::mouseMoveEvent( QMouseEvent* event )
  81. {
  82.   if ( left_button_down_ ) {
  83.     const QPoint pos = event->pos();
  84.     int h_diff = pos_at_down_.y() - pos.y();
  85.     setGeometry( x(), y(), width(), height()-h_diff );
  86.     size_hint_ = QSize( width(), height()-h_diff );
  87.     pos_at_down_ = pos;
  88.   }
  89. }
  90.  
  91. QSize resizeable_textedit::sizeHint() const
  92. {
  93.   if ( size_hint_.isValid() )
  94.   {
  95.     return size_hint_;
  96.   }
  97.  
  98.   return QTextEdit::sizeHint();
  99. }
  100.  
  101. QSize resizeable_textedit::minimumSizeHint() const
  102. {
  103.   return QSize( 0, 0 );
  104. }
  105.  
  106. #include <QApplication>
  107. #include <QtGui>
  108. #include "resizeable_textedit.hpp"
  109.  
  110. int main( int argc, char* argv[] )
  111. {
  112.   QApplication app( argc, argv );
  113.  
  114.   QWidget* window = new QWidget();
  115.   resizeable_textedit* edit = new resizeable_textedit( window );
  116.   QGridLayout* grid = new QGridLayout( window );
  117.   window->setLayout( grid );
  118.   QPalette p = window->palette();
  119.   p.setColor( window->backgroundRole(), Qt::yellow );
  120.   window->setPalette( p );
  121.   QPushButton* b = new QPushButton( window );
  122.   b->setText( "HELLO" );
  123.   grid->addWidget( edit );
  124.   grid->addWidget( b );
  125.  
  126.   window->show();
  127.  
  128.   return app.exec();
  129. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement