Trolltech Home | Qt-interest Home | Recent Threads | All Threads | Author | Date
All threads index page 7

Qt-interest Archive, July 2007
QT: 4.3.0 Splitter Handle Question


Message 1 in thread

Platform: QT Windows 4.3.0

I am trying to force a minimum size of the splitter handle so that I  
may draw something in it.  I've tried setting the minimum size, size  
hint and other experiments.  All to no avail.  Does anyone know how  
to force the minimum size?

This code is basic and just paints the splitter handle gray so that I  
can see it painting.

Help me Obi Wan....

Slide Splitter.h

#ifndef SLIDESPLITTER_H
#define SLIDESPLITTER_H

#include <QSplitter>
#include <QSplitterHandle>

class SlideSplitterHandle : public QSplitterHandle
{
public:
       SlideSplitterHandle(Qt::Orientation orientation, QSplitter*  
parent);

       virtual QSize minimumSizeHint(void);

protected:
       virtual void paintEvent(QPaintEvent* event);

};

class SlideSplitter : public QSplitter
{
       Q_OBJECT

public:
       SlideSplitter(QWidget *parent = 0);
       ~SlideSplitter();

  protected:
      virtual QSplitterHandle* createHandle();
};

#endif // SLIDESPLITTER_H



Slide Splitter.cpp


#include "SlideSplitter.h"
#include <QPaintEvent>
#include <QLinearGradient>
#include <QPainter>

SlideSplitter::SlideSplitter
(
       QWidget* parent
) :
       QSplitter(parent)
{
}

SlideSplitter::~SlideSplitter()
{

}

QSplitterHandle* SlideSplitter::createHandle()
{
       return new SlideSplitterHandle(orientation(), this);
}

SlideSplitterHandle::SlideSplitterHandle
(
       Qt::Orientation orientation,
       QSplitter* parent
) :
       QSplitterHandle(orientation, parent)
{
}

QSize SlideSplitterHandle::minimumSizeHint()
{
       const int kSplitterSize(30);
       QSize hint(-1, -1);

       switch (orientation())
       {
       case Qt::Horizontal:
             hint.setHeight(kSplitterSize);
             break;

       case Qt::Vertical:
             hint.setWidth(kSplitterSize);
             break;
       }

       return hint;
}

void SlideSplitterHandle::paintEvent
(
       QPaintEvent* event
)
{
       QPainter painter;
       QRect bounds(rect());

       bounds.adjust(0, 0, -1, -1);

       painter.begin(this);

       QBrush brush(Qt::lightGray);
       QPen pen(Qt::darkGray);

       painter.setBrush(brush);
       painter.setPen(pen);

       painter.drawRect(bounds);


		// going to draw some stuff here

       painter.end();
}