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();
}