Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef resizeable_textedit_hpp_included
- #define resizeable_textedit_hpp_included
- #include <QtGui>
- class resizeable_textedit : public QTextEdit {
- Q_OBJECT
- public:
- resizeable_textedit( QWidget* parent = 0 );
- protected:
- void paintEvent( QPaintEvent* event );
- void mousePressEvent( QMouseEvent* event );
- void mouseMoveEvent( QMouseEvent* event );
- void mouseReleaseEvent( QMouseEvent* event );
- QSize sizeHint() const;
- QSize minimumSizeHint() const;
- private:
- bool left_button_down_;
- QPoint pos_at_down_;
- QSize size_hint_;
- };
- #endif
- #include "resizeable_textedit.hpp"
- resizeable_textedit::resizeable_textedit( QWidget* parent )
- : QTextEdit( parent )
- {
- left_button_down_ = false;
- }
- void resizeable_textedit::paintEvent( QPaintEvent* event )
- {
- QTextEdit::paintEvent( event );
- QPainter painter( viewport() );
- painter.setPen( Qt::lightGray );
- painter.setBrush( QBrush( Qt::lightGray, Qt::SolidPattern ) );
- QRect region = viewport()->geometry();
- int x = region.bottomRight().x();
- int y = region.bottomRight().y();
- const QPoint points[3] = {
- QPoint( x, y ),
- QPoint( x, y-15 ),
- QPoint( x-15, y )
- };
- painter.drawPolygon( points, 3 );
- }
- void resizeable_textedit::mousePressEvent( QMouseEvent* event )
- {
- if ( event->button() == Qt::LeftButton ) {
- QApplication::setOverrideCursor( Qt::SizeVerCursor );
- const QPoint pos = event->pos();
- const QRect region = viewport()->geometry();
- if ( pos.x() >= region.bottomRight().x() - 15 &&
- pos.y() >= region.bottomRight().y() - 15 ) {
- left_button_down_ = true;
- pos_at_down_ = pos;
- }
- }
- }
- void resizeable_textedit::mouseReleaseEvent( QMouseEvent* event )
- {
- QApplication::setOverrideCursor( Qt::ArrowCursor );
- left_button_down_ = false;
- }
- void resizeable_textedit::mouseMoveEvent( QMouseEvent* event )
- {
- if ( left_button_down_ ) {
- const QPoint pos = event->pos();
- int h_diff = pos_at_down_.y() - pos.y();
- setGeometry( x(), y(), width(), height()-h_diff );
- size_hint_ = QSize( width(), height()-h_diff );
- pos_at_down_ = pos;
- }
- }
- QSize resizeable_textedit::sizeHint() const
- {
- if ( size_hint_.isValid() )
- {
- return size_hint_;
- }
- return QTextEdit::sizeHint();
- }
- QSize resizeable_textedit::minimumSizeHint() const
- {
- return QSize( 0, 0 );
- }
- #include <QApplication>
- #include <QtGui>
- #include "resizeable_textedit.hpp"
- int main( int argc, char* argv[] )
- {
- QApplication app( argc, argv );
- QWidget* window = new QWidget();
- resizeable_textedit* edit = new resizeable_textedit( window );
- QGridLayout* grid = new QGridLayout( window );
- window->setLayout( grid );
- QPalette p = window->palette();
- p.setColor( window->backgroundRole(), Qt::yellow );
- window->setPalette( p );
- QPushButton* b = new QPushButton( window );
- b->setText( "HELLO" );
- grid->addWidget( edit );
- grid->addWidget( b );
- window->show();
- return app.exec();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement