Tôi đã viết một chương trình tối thiểu là hai trường QTextEdit
. Trong trường bên trái bạn viết và văn bản bạn đang viết cũng được hiển thị trong bản chỉnh sửa văn bản thứ hai. Bạn nhận được văn bản của một số QTextEdit
bằng cách sử dụng toPlainText()
và tín hiệu là textChanged()
.
Tôi đã thử nghiệm nó và những gì bạn viết trong m_pEdit_0
được hiển thị trong "thời gian thực" trong m_pEdit_1
.
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();
}
Edit:
Điều này sẽ làm việc quá, nhưng sẽ thiếu trong hoạt động cho các tài liệu khổng lồ:
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));
}
}
Có vẻ như bạn phải phân lớp QPlainTextEdit. không có cách nào khác để làm điều đó. bạn có thể nhận được văn bản có thể nhìn thấy bằng cách sử dụng firstVisibleBlock và xem() của QRect. (sizeHint). bạn phải tính toán khối hiển thị đầu tiên và cuối cùng và trả về văn bản giữa chúng. –
Tôi sẽ đánh giá rất cao câu trả lời cho điều này là tốt. Tôi đang làm việc trên nó bây giờ quá. Phương thức built in toPlainText() không xuất hiện để truy xuất văn bản hiện tại, mà là một số tham số văn bản khác không được cập nhật khi người dùng nhập hoặc thay đổi văn bản hiển thị. – ely
@EMS: 'toPlainText()' đang làm việc trong mã tôi đã viết, xem câu trả lời dưới đây. – Exa