Hi,

Something like this?


#include <QTextEdit>
#include <QHBoxLayout>
#include <QLabel>
#include <QWidget>
#include <QApplication>
#include <QPainter>
#include <QVBoxLayout>
#include <QMouseEvent>
#include <QResizeEvent>

class Text;

class Corner
    :    public QWidget
{
public:
     Corner( QWidget * parent )
        :    QWidget( parent )
        ,    m_toResize( parent )
        ,    m_pressed( false )
    {
    }

    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->resize( m_toResize->size() + QSize( delta.x(), delta.y() ) );
        }

        e->accept();
    }

private:
    QWidget * m_toResize;
    QPoint m_pos;
    bool m_pressed;
};

class Text
    :    public QTextEdit
{
public:
    Text( QWidget * parent )
        :    QTextEdit( parent )
        ,    m_corner( new Corner( this ) )
    {
        m_corner->move( width() - m_corner->width(),
            height() - m_corner->height() );
    }

    virtual ~Text()
    {
    }

protected:
    void resizeEvent( QResizeEvent * e ) Q_DECL_OVERRIDE
    {
        m_corner->move( width() - m_corner->width(),
            height() - m_corner->height() );

        e->accept();
    }

private:
    Corner * m_corner;
};

class Form
    :    public QWidget
{
public:
    Form()
    {
        QVBoxLayout * v = new QVBoxLayout( this );
        QHBoxLayout * h = new QHBoxLayout;
        v->addLayout( h );
        QLabel * label = new QLabel( "Resizeable Text Field", this );
        h->addWidget( label );
        Text * text = new Text( this );
        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 13.04.2018 10:34, Alexander Semke wrote:
Hi,

one frequently sees form text fields on the web where the actual text field can
be resized by the user by clicking on the resize-symbol in the corner of the
text field and dragging it until the desired size is achieved. I'm wondering
how to get this for a QTextEdit  placed in a layout. Does somebody have an
idea here?


Thanks and 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

Reply via email to