16,212
社区成员
发帖
与我相关
我的任务
分享
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->textEdit->document(), SIGNAL(contentsChange(int,int,int)),
this, SLOT(onContentsChange(int,int,int)));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::onContentsChange(int position, int charsRemoved, int charsAdded)
{
const QString inputMask = "*";
//添加
if (charsAdded > charsRemoved)
{
QTextCursor cursor = ui->textEdit->textCursor();
if (charsRemoved == 0)
{
cursor.setPosition(position);
cursor.setPosition(position + charsAdded - charsRemoved, QTextCursor::KeepAnchor);
QString text = cursor.selectedText();
doc.insert(position, text);
}
else
{
//修改之后的位置,
int posNow = cursor.position();
cursor.setPosition(position);
cursor.setPosition(posNow, QTextCursor::KeepAnchor);
//新加入的字符.
QString textAdded = cursor.selectedText();
int removed = textAdded.size() - (charsAdded - charsRemoved);
doc.remove(position, removed);
doc.insert(position, textAdded);
}
//替换
ui->textEdit->document()->blockSignals(true);
cursor.setPosition(position);
int end = (position + charsAdded) >= ui->textEdit->document()->characterCount() ? (position + charsAdded - 1) : (position + charsAdded);
cursor.setPosition(end, QTextCursor::KeepAnchor);
QString text = cursor.selectedText();
text.replace(QRegExp("[^\\n]"), inputMask);
cursor.insertText(text);
ui->textEdit->document()->blockSignals(false);
}
//修改
else if (charsAdded == charsRemoved)
{
QTextCursor cursor = ui->textEdit->textCursor();
cursor.setPosition(position);
cursor.setPosition(position + charsAdded, QTextCursor::KeepAnchor);
QString text = cursor.selectedText();
doc.replace(position, text.length(), text);
//替换
ui->textEdit->document()->blockSignals(true);
text.replace(QRegExp("[^\\n]"), inputMask);
cursor.insertText(text);
ui->textEdit->document()->blockSignals(false);
}
//删除
else
{
doc.remove(position, charsRemoved);
if (charsAdded > 0)
{
QTextCursor cursor = ui->textEdit->textCursor();
cursor.setPosition(position);
cursor.setPosition(position + charsAdded, QTextCursor::KeepAnchor);
QString text = cursor.selectedText();
doc.insert(position, text);
//替换
ui->textEdit->document()->blockSignals(true);
text.replace(QRegExp("[^\\n]"), inputMask);
cursor.insertText(text);
ui->textEdit->document()->blockSignals(false);
}
}
ui->textEdit_2->setPlainText(doc);
}