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



  • @peter_sailor

    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


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.