zeilen anzeigen in QTextEdit und QScrollarea scrollt nicht

Alles rund um die Programmierung mit Qt
Antworten
michbex
Beiträge: 23
Registriert: 31. Mai 2006 15:53
Wohnort: Princeton
Kontaktdaten:

zeilen anzeigen in QTextEdit und QScrollarea scrollt nicht

Beitrag von michbex »

Hi, habe zwei kurze Fragen:

Ich will in einer QTextEdit Zeilenlinien zwischen dem Text anzeigen. Nachdem der Text Scrollbar sein soll, kommt eine Textur in den Hintergrund nicht in Frage. Irgendjemand eine idee?

Mein zweites Problem ist folgendes: Ich habe ein Widget, abgeleitet von QScrollArea. Das Widget beinhaltet ein QVBoxLayout mit 2 QTextEdit areas. Ich will dass - sobald die rechte QTextEdit zu scrollen beginnen soll, das ganze Widget scrollt (und somit auch die linke QtextEdit). Dazu habe ich bei beiden Textedits VScrollPolicy abgedreht und das Widget von QScrollarea abgeleitet... Was mach ich noch falsch?

Thx

Michael
OscarWild
Beiträge: 54
Registriert: 19. Juni 2006 19:59

Re: zeilen anzeigen in QTextEdit und QScrollarea scrollt nic

Beitrag von OscarWild »

michbex hat geschrieben:Ich will in einer QTextEdit Zeilenlinien zwischen dem Text anzeigen. Nachdem der Text Scrollbar sein soll, kommt eine Textur in den Hintergrund nicht in Frage. Irgendjemand eine idee?
Eigentlich nur: eigene Klasse von QTextEdit ableiten, Paint-Methode um das Zeichnen der Zeilenlinien ergänzen.
michbex hat geschrieben:Mein zweites Problem ist folgendes: Ich habe ein Widget, abgeleitet von QScrollArea. Das Widget beinhaltet ein QVBoxLayout mit 2 QTextEdit areas. Ich will dass - sobald die rechte QTextEdit zu scrollen beginnen soll, das ganze Widget scrollt (und somit auch die linke QtextEdit). Dazu habe ich bei beiden Textedits VScrollPolicy abgedreht und das Widget von QScrollarea abgeleitet...
Hm... mal langsam zum mitmeiseln: ein QVBoxLayout mit zwei QTextEdit-Areas links und rechts... das müsste dann aber ein QHBoxLayout sein? Aber auch dann soll sowohl das Parent-Widget als auch das linke QTextEdit scrollen, wenn das rechte QTextEdit gescrollt wird? Dazu kann ich mir beim besten Willen kein Bedienkonzept vorstellen... erklär nochmal genauer!
michbex
Beiträge: 23
Registriert: 31. Mai 2006 15:53
Wohnort: Princeton
Kontaktdaten:

Beitrag von michbex »

Ok, war ein bisschen schlecht geschrieben:

QHBoxLayout, beinhaltet 2 QTextEdits. Das linke QTextEdit ist readonly und soll mitscrollen sobald die rechte QTextEdit gescrollt wird. Moechte einfach Zeilennummern fuer eine Scriptingarea anzeigen. Links Zeilennummern, rechts textarea.

Hoffe es ist jetzt verstaendlicher.

Thx anyway

Michael
michbex
Beiträge: 23
Registriert: 31. Mai 2006 15:53
Wohnort: Princeton
Kontaktdaten:

Beitrag von michbex »

Zum ueberschreiben der Paintmethode der QTextEdit Klasse:

Code: Alles auswählen

void QTextEditSubclass::paintEvent ( QPaintEvent * event )
{
		QPainter painter(this);	
		painter.setPen(Qt::red);
		painter.setFont(QFont("Arial", 30));
		painter.drawText(rect(), Qt::AlignCenter, "ABC");
}
Wenn ich das mache, wird mir das Widget angezeigt wie vorher, die Funktion wird aber aufgerufen. Warum wird nicht gezeichnet?

Michael
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Nur mal so zur Anregung:

Code: Alles auswählen

class Edit : public QTextEdit
{
Q_OBJECT
public:
	Edit(QWidget *parent=0);
	~Edit();

	void paintEvent(QPaintEvent *e);

};

Code: Alles auswählen

Edit::Edit(QWidget *parent)
	: QTextEdit(parent)
{
}

Edit::~Edit()
{
}

void Edit::paintEvent(QPaintEvent* e)
{
	QTextEdit::paintEvent(e);
	
	QPainter p(viewport());
	p.setPen(QPen(QColor(192, 192, 192), 0, Qt::DashLine));
	
	int y=0;
	
	QTextBlock block=document()->begin();
	while (block.isValid()) {
		QTextLayout *layout=block.layout();
		QRectF r=layout->boundingRect();
		
		y+=r.height();
		
		p.drawLine(r.left(), y, r.right(), y);
		
		block=block.next();
	}
}
michbex
Beiträge: 23
Registriert: 31. Mai 2006 15:53
Wohnort: Princeton
Kontaktdaten:

Beitrag von michbex »

Hi,

erstmal vielen vielen Dank fuer die ausfuehrliche Hilfe. Es lag daran, dass ich keinen Viewport angegeben habe.

Mir gefaellt auch dein Ansatz, allerdings habe ich bei dieser Loesung das Problem, dass beim scrollen die linien ja bleiben und nur der text scrolled. Aehnlich als wenn ich die linien nur als background textur reingebe. Any ideas?

Text muss nur vertikal scrollbar sein.

Danke nochmal,

Michbex
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Klar, QTextEdit ist von QAbstractScrollArea abgeleitet. Der Rest ist Hausaufgabe...
michbex
Beiträge: 23
Registriert: 31. Mai 2006 15:53
Wohnort: Princeton
Kontaktdaten:

geloest

Beitrag von michbex »

thx,

scrollContentsBy hat mir geholfen!

mfg Michbex
Antworten