Solved QTextBrowser ans Ende springen
-
qt 5.11.2. , creator 4.7.1
Ich habe mit dem Creator einen QTextBrowser erzeugt. Wenn ich darin großeren Text darstellen will, möchte ich ans Textende springen (grundsätzlich). Frage:
- Gibt es im Creator ein einstellbares Attribut?
- Gibt es in irgendeiner Klasse einen "set >> ans Ende springen"?
Beim Googeln habe ich folgende Lösung gefunden:
QScrollBar *sb = ui->protokoll->verticalScrollBar();
sb->setValue(sb->maximum());
Die hat aber nicht funktioniert.Vielen Dank im Voraus für Euren Lösungsansatz
Grüße
Peter -
Moin,
@peter_sailor said in QTextBrowser ans Ende springen:Beim Googeln habe ich folgende Lösung gefunden:
QScrollBar *sb = ui->protokoll->verticalScrollBar();
sb->setValue(sb->maximum());
Die hat aber nicht funktioniert.das ist aber grundsätzlich die Richtige Lösung. Wie genau hast du das den implementiert?
-
Hallo,
erstellt habe ich es im Designer.
Der Text wir mit
ui->protokoll->setText(QString::fromUtf8(back));
übergeben, wobei in der Variable back der darzustellende Text drinsteht.
Diese Zeile verwende ich an mehreren Stellen im Programm.Grüße
Peter -
mmh, wie wärs mit folgendem, muss in den constructor deiner Klasse direkt hinter ui->setupUi(this);
connect(ui->protokoll, &QTextBrowser::textChanged, [ui->protokoll] () ->void { QScrollBar *sb = ui->protokoll->verticalScrollBar(); sb->setValue(sb->maximum()); });
Beispiel
#include <QApplication> #include <QTextBrowser> #include <QScrollBar> #include <QTimer> int main(int argc, char *argv[]) { QApplication a(argc, argv); QTextBrowser *br = new QTextBrowser(); br->show(); QObject::connect(br, &QTextBrowser::textChanged, [br] () ->void { QScrollBar *sb = br->verticalScrollBar(); sb->setValue(sb->maximum()); }); QTimer *timer = new QTimer(); QObject::connect(timer, &QTimer::timeout, [br]() ->void{ br->append("jfsdkjfhjsdkjfhsdkjfhdskjf"); }); timer->start(100); return a.exec(); }
-
Hallo,
vielen Dank.Quelltext:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
// QScrollBar *sb = ui->protokoll->verticalScrollBar();
// sb->setValue(sb->maximum());connect(ui->protokoll, &QTextBrowser::textChanged, ui->protokoll ->void {
QScrollBar *sb = ui->protokoll->verticalScrollBar();
sb->setValue(sb->maximum());});Da schimpft mich der Comkiler aus >>C:\Users\PEB\Desktop\QT_Anwendungen\schach\mainwindow.cpp:42: Fehler: expected ',' or ']' in lambda capture list
Die auskommentierten beiden Zeilen gehen zwar durch den Compiler, aber keine Wirkung.
Grüße
Peter -
@peter_sailor
das ist richtig, die Syntax ist falsch, kannst das schon direkt aus meinem vorherigen Post copy &pasten@J.Hilk said in QTextBrowser ans Ende springen:
connect(ui->protokoll, &QTextBrowser::textChanged, [ui->protokoll] () ->void { QScrollBar *sb = ui->protokoll->verticalScrollBar(); sb->setValue(sb->maximum()); });
-
Hallo JH,
ich habe jetzt gerade noch einen Lösungsweg gefunden:
ui->protokoll->setText(QString::fromUtf8(back)); ui->protokoll->verticalScrollBar()->setValue(ui->protokoll->verticalScrollBar()->maximum());
wenn ich gleich hinter der Ausgabe ... maximum() ... setze, dann funktioniert es. Das muss ich dann hinter jeder Ausgabe auch tun.
Ist Dein Lösungsansatz eine generelle Einstellung?
Grüße
Peter