Ben minimal bir program olarak iki QTextEdit
alanlar yazdım. Yazdığınız sol yazıda ve yazdığınız metin ikinci metin düzenlemesinde de gösterilir. Sen toPlainText()
kullanarak QTextEdit
metnini almak ve sinyal textChanged()
olduğunu.
Bunu sınandım ve m_pEdit_0
'da yazdıklarınız "gerçek zamanlı" olarak m_pEdit_1
'da gösterilmektedir.
main_window.hpp
#ifndef __MAIN_WINDOW_H__
#define __MAIN_WINDOW_H__
#include <QtGui/QtGui>
#include <QtGui/QMainWindow>
#include <QtGui/QApplication>
class main_window : public QMainWindow
{
Q_OBJECT
public:
main_window(QWidget* pParent = 0);
~main_window();
public Q_SLOTS:
void on_edit_0_text_changed();
private:
QHBoxLayout* m_pLayout;
QTextEdit* m_pEdit_0;
QTextEdit* m_pEdit_1;
};
#endif // !__MAIN_WINDOW_H__
main_window.cpp
#include "main_window.hpp"
main_window::main_window(QWidget *pParent) : QMainWindow(pParent)
{
m_pEdit_0 = new QTextEdit(this);
m_pEdit_1 = new QTextEdit(this);
connect(m_pEdit_0, SIGNAL(textChanged()), this, SLOT(on_edit_0_text_changed()));
m_pLayout = new QHBoxLayout;
m_pLayout->addWidget(m_pEdit_0);
m_pLayout->addWidget(m_pEdit_1);
QWidget* central_widget = new QWidget(this);
central_widget->setLayout(m_pLayout);
setCentralWidget(central_widget);
}
main_window::~main_window()
{
}
void main_window::on_edit_0_text_changed()
{
m_pEdit_1->setText(m_pEdit_0->toPlainText());
}
main.cpp
#include "main_window.hpp"
int main(int argc, char* argv[])
{
QApplication a(argc, argv);
main_window mw;
mw.show();
return a.exec();
}
Düzenleme: Bu iş çok, ama çok büyük belgeler için performans eksikliği olur
: Eğer QPlainTextEdit alt sınıf var gibi
void main_window::on_edit_0_text_changed()
{
QStringList text_in_lines = m_pEdit_0->toPlainText().split("\n");
m_pEdit_1->clear();
for(int i = 0; i < text_in_lines.count(); i++)
{
m_pEdit_1->append(text_in_lines.at(i));
}
}
geliyor. böyle bir şey yapmanın başka yolu yok. firstVisibleBlock ve view() 'in QRect'i kullanarak görünür metin alabilirsiniz. (SizeHint). İlk ve son görünür bloğu hesaplamanız ve aralarındaki metni döndürmeniz gerekir. –
Bunun için de bir cevabı takdir ediyorum. Şimdi de üzerinde çalışıyorum. InPlainText() yönteminin yerleşik yöntemi, halihazırda görünür olan metni almıyor, aksine kullanıcı olarak güncellenmeyen veya görünür metinde değişiklik yapan bazı farklı metin parametrelerini görüntülemiyor. – ely
@EMS: 'toPlainText()' Yazdığım kodda çalışıyor, aşağıdaki cevaba bakınız. – Exa