Seite 1 von 1

QSplitterHandle zeichnet nicht auf QSplitter

Verfasst: 13. September 2009 12:23
von Matze84
Hallo

möchte meinen Splittern eine Farbe geben
Implementierung mainwindow:

Code: Alles auswählen

MainWindow::MainWindow()
{
	m_pVSplitter = new Splitter( Qt::Vertical, this );
	m_pHSplitter = new Splitter( Qt::Horizontal, m_pVSplitter );
	.
	.
	init();
	.
	.
	setCentralWidget( m_pMdiArea );	
}
Klasse Splitter

Code: Alles auswählen

#include <QtGui/QSplitter>
#include <QtGui/QSplitterHandle>


class Splitter : public QSplitter {
public:
	Splitter(Qt::Orientation orientation, QWidget *parent = 0)
		: QSplitter(orientation, parent) 
	{
			setHandleWidth(7);
			SplitterHandle *sp = createHandle();
	}

protected:
	QSplitterHandle *createHandle() {
		return new SplitterHandle(orientation(), this);
	}

private:
	class SplitterHandle : public QSplitterHandle {
	public:
		SplitterHandle(Qt::Orientation orientation, QSplitter *parent = 0)
			: QSplitterHandle(orientation, parent) { }

		void paintEvent(QPaintEvent *event) {
			QPainter painter(this);
			QLinearGradient gradient(0, 0, rect().width(), rect().height());
			
			if (orientation() == Qt::Horizontal) {
				gradient.setStart(rect().left(), rect().height()/2);
				gradient.setFinalStop(rect().right(), rect().height()/2);
			} else {
				gradient.setStart(rect().width()/2, rect().top());
				gradient.setFinalStop(rect().width()/2, rect().bottom());
			}
			painter.fillRect(event->rect(), QBrush(gradient));

		}
	};
};
Die Splitter erscheinen an richtiger Stelle

das Gezeichnete erscheint nicht auf den Splittern
sondern an den Koordinaten 0,0 und 29,99

Nach einem Debug und stellte ich fest, dass der this Pointer in der Methode createHandle eben in der Variablen rect diese Koordinante besitzt

was mache ich falsch?
geht das mit Styles auch?

Verfasst: 13. September 2009 13:39
von arj
Vermutlich geht das mit Styles auch.
Hier steht

Code: Alles auswählen

A QSplitter derives from a QFrame and hence can be styled like a QFrame.
Deshalb solltest Du den Splitter genau wie ein QFrame "stylen" können. Allerdings hab ich es nicht ausprobiert ist nur eine Annahme aufgrund der Dokumentation.