Seite 1 von 1
zeilen anzeigen in QTextEdit und QScrollarea scrollt nicht
Verfasst: 17. Juli 2006 15:24
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
Re: zeilen anzeigen in QTextEdit und QScrollarea scrollt nic
Verfasst: 18. Juli 2006 16:03
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!
Verfasst: 18. Juli 2006 17:30
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
Verfasst: 18. Juli 2006 17:58
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
Verfasst: 18. Juli 2006 21:13
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();
}
}
Verfasst: 18. Juli 2006 21:38
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
Verfasst: 18. Juli 2006 21:58
von upsala
Klar, QTextEdit ist von QAbstractScrollArea abgeleitet. Der Rest ist Hausaufgabe...
geloest
Verfasst: 28. Juli 2006 23:17
von michbex
thx,
scrollContentsBy hat mir geholfen!
mfg Michbex