Hi,
#include <QTextEdit>
#include <QHBoxLayout>
#include <QLabel>
#include <QWidget>
#include <QApplication>
#include <QPainter>
#include <QVBoxLayout>
#include <QMouseEvent>
#include <QResizeEvent>
#include <QFrame>
class Resizable {
public:
Resizable()
{
}
virtual ~Resizable()
{
}
virtual void addSize( const QSize & size ) = 0;
protected:
QSize m_size;
};
class Corner
: public QWidget
{
public:
Corner( Resizable * resizable, QWidget * parent )
: QWidget( parent )
, m_toResize( resizable )
, m_pressed( false )
{
resize( sizeHint() );
}
virtual ~Corner()
{
}
QSize sizeHint() const Q_DECL_OVERRIDE
{
return QSize( 10, 10 );
}
protected:
void paintEvent( QPaintEvent * ) Q_DECL_OVERRIDE
{
QPainter p( this );
p.setPen( Qt::red );
p.setBrush( Qt::red );
p.drawRect( rect() );
}
void mousePressEvent( QMouseEvent * e ) Q_DECL_OVERRIDE
{
if( e->button() == Qt::LeftButton )
{
m_pos = e->pos();
m_pressed = true;
}
e->accept();
}
void mouseReleaseEvent( QMouseEvent * e ) Q_DECL_OVERRIDE
{
if( e->button() == Qt::LeftButton )
m_pressed = false;
e->accept();
}
void mouseMoveEvent( QMouseEvent * e ) Q_DECL_OVERRIDE
{
if( m_pressed )
{
const QPoint delta = e->pos() - m_pos;
m_toResize->addSize( QSize( delta.x(), delta.y() ) );
}
e->accept();
}
private:
Resizable * m_toResize;
QPoint m_pos;
bool m_pressed;
};
class Text
: public QTextEdit
, public Resizable
{
public:
Text( QWidget * parent )
: QTextEdit( parent )
, m_corner( new Corner( this, this ) )
, m_size( QTextEdit::sizeHint() )
{
m_corner->move( width() - m_corner->width(),
height() - m_corner->height() );
}
virtual ~Text()
{
}
void addSize( const QSize & size ) Q_DECL_OVERRIDE
{
setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed );
m_size += size;
updateGeometry();
}
QSize sizeHint() const Q_DECL_OVERRIDE
{
return m_size;
}
protected:
void resizeEvent( QResizeEvent * e ) Q_DECL_OVERRIDE
{
QTextEdit::resizeEvent( e );
m_corner->move( e->size().width() - m_corner->width(),
e->size().height() - m_corner->height() );
m_size = e->size();
e->accept();
}
private:
Corner * m_corner;
QSize m_size;
};
class Form
: public QWidget
{
public:
Form()
{
QVBoxLayout * v = new QVBoxLayout( this );
QFrame * f = new QFrame( this );
f->setFrameStyle( QFrame::Panel | QFrame::Sunken );
QHBoxLayout * h = new QHBoxLayout( f );
v->addWidget( f );
QLabel * label = new QLabel( "Resizable Text Field", f );
label->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed );
h->addWidget( label );
Text * text = new Text( f );
h->addWidget( text );
QSpacerItem * s = new QSpacerItem( 10, 10, QSizePolicy::Fixed,
QSizePolicy::Expanding );
v->addItem( s );
resize( 800, 800 );
}
virtual ~Form()
{
}
};
int main( int argc, char ** argv )
{
QApplication app( argc, argv );
Form f;
f.show();
return app.exec();
}
On 15.04.2018 19:30, Alexander Semke wrote:
Hi Igor,
As a possible solution:
[...]
Works now. I pushed a modified version of your code to our repository in
https://cgit.kde.org/labplot.git/commit/?
id=1cacf9f095b5e850baa58584b071986fbfe790fb
The only problem now is that the entered text is not shown in TextEdit with
this new class. The text changes are accepted, but nothing is shown. Any idea
here?
Regards,
Alexander
_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest
_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest