2016-11-08 2 views
0

Ich möchte ein internes Tool für meine Verwendung mit 2 QPlainTextEdits erstellen. Ich möchte eine Funktionalität machen, dass, wenn ich einen Text blättern kann, der andere auch gescrollt wird. Ich habe versucht, etwas von http://doc.qt.io/qt-4.8/qt-widgets-codeeditor-example.html, um herauszufinden, aber es funktioniert nicht, wie ichQT: Scrollen 2 QPlainTextEdits zur gleichen Zeit

erwartet

Hier ist mein Code:

CustomEdit.h

#ifndef CUSTOMEDIT_H 
#define CUSTOMEDIT_H 

#include <QPlainTextEdit> 

class CustomEdit : public QPlainTextEdit 
{ 
    Q_OBJECT 
public: 
    CustomEdit(QWidget *parent = 0); 

public slots: 
    void updatePosition(const QRect &, int); 
}; 

#endif // CUSTOMEDIT_H 

CustomEdit.cpp

#include "customedit.h" 

CustomEdit::CustomEdit(QWidget *parent) : QPlainTextEdit(parent) 
{ 

} 

void CustomEdit::updatePosition(const QRect &rect, int position) { 

    if (position) { 
     this->scroll(0, position); 
     this->update(0, rect.y(), this->width(), rect.height()); 
    } 
    else { 
     this->update(0, rect.y(), this->width(), rect.height()); 
    } 

} 

Mainwindow Erbauer

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 

    printoutAnalyzer = new PrintoutAnalyzer(); 

    ui->Log->setReadOnly(true); 
    ui->Progress->reset(); 

    resultEdit = new CustomEdit(this); 
    printoutEdit = new CustomEdit(this); 

    resultEdit->setReadOnly(true); 
    printoutEdit->setReadOnly(true); 

    ui->horizontalLayout->addWidget(printoutEdit); 
    ui->horizontalLayout->addWidget(resultEdit); 


    connect(printoutAnalyzer, SIGNAL(writeToLog(QString)), this, SLOT(putLogText(QString))); 
    connect(printoutAnalyzer, SIGNAL(writeToResult(QString)), this, SLOT(putResultText(QString))); 
    connect(printoutAnalyzer, SIGNAL(setProgress(int)), this, SLOT(setProgress(int))); 
    connect(ui->LoadPrintout, SIGNAL(triggered()), this, SLOT(choosePrintoutFile())); 

    connect(printoutEdit, SIGNAL(updateRequest(QRect, int)), resultEdit, SLOT(updatePosition(QRect, int))); 
    connect(resultEdit, SIGNAL(updateRequest(QRect, int)), printoutEdit, SLOT(updatePosition(QRect, int))); 
} 

Wenn ich führen Sie den Code und blättern Sie einen Text der zweite sieht wie folgt aus (Textänderungen haben den gleichen Inhalt) bearbeiten:

Fault example

+1

Haben Sie versucht, die verticalScrollBars aus beiden Textänderungen mit valueChanged/setValue zu verbinden? – Lifeisabug

Antwort

0

Die einfachste die vertikalen Scrollbalken Ihres QPlainTextEdit zu halten wäre synchron mit der '' sliderPosition-Eigenschaft ''.

Verwandte Themen