QSplitterHandle zeichnet nicht auf QSplitter

Alles rund um die Programmierung mit Qt
Antworten
Matze84
Beiträge: 11
Registriert: 19. April 2009 13:59

QSplitterHandle zeichnet nicht auf QSplitter

Beitrag 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?
arj
Beiträge: 45
Registriert: 1. Juni 2009 13:51
Wohnort: Ihringen

Beitrag 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.
Antworten