我的目的是在QTextFrame
中选定的文本周围绘制QPlainTextEdit
。
这是我尝试过的:
mainwindow.cpp
#include "mainwindow.h"
#include<QFile>
#include<QLine>
#include<QTextDocument>
#include<QVBoxLayout>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
setMouseTracking(true);
objQPlainTextEdit.setPlainText("1234567890\n1234567890\n1234567890\n1234567890");
connect(&objQPlainTextEdit, &QPlainTextEdit::cursorPositionChanged,
[this]() {
extractTextBlock(objQPlainTextEdit.textCursor().selectedText());
}
);
QWidget *objMainWidget = new QWidget( this );
QVBoxLayout *objVBoxLayout = new QVBoxLayout( objMainWidget );
objVBoxLayout->addWidget( &objQPlainTextEdit );
objMainWidget->setLayout( objVBoxLayout );
setCentralWidget( objMainWidget );
objQTextFrame = new QTextFrame( objQPlainTextEdit.document()->rootFrame()->document() );
objQTextCursor.select(QTextCursor::BlockUnderCursor);
objQTextCursor = objQTextFrame->lastCursorPosition();
objQTextFrameFormat.setBorder(11);
objQPlainTextEdit.setTextCursor( objQTextCursor);
objQColor.setRed(22);
objQBrush.setColor( objQColor );
objQTextFrameFormat.setBorderBrush( objQBrush );
objQTextFrame->firstCursorPosition().insertFrame(objQTextFrameFormat);
}
MainWindow::~MainWindow(){}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QTextCursor>
#include <QTextBlock>
#include <QPlainTextEdit>
#include <iostream>
#include <QDebug>
#include <QTextFrame>
#include <QBrush>
#include <QColor>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
QPlainTextEdit objQPlainTextEdit;
QTextFrame *objQTextFrame;
QTextFrameFormat objQTextFrameFormat;
QTextCursor objQTextCursor;
QBrush objQBrush;
QColor objQColor;
MainWindow( QWidget *parent = 0 );
~MainWindow();
public slots:
void extractTextBlock( QString arg )
{
qDebug()<< "\n: " << arg << "\n";
}
};
#endif // MAINWINDOW_H
我可以选择文本,但是不会在其周围绘制框架。请指导。
这是罪魁祸首代码。我不知道如何正确使用它。
objQTextFrame = new QTextFrame( objQPlainTextEdit.document()->rootFrame()->document() );
objQTextCursor.select(QTextCursor::BlockUnderCursor);
objQTextCursor = objQTextFrame->lastCursorPosition();
objQTextFrameFormat.setBorder(11);
objQPlainTextEdit.setTextCursor( objQTextCursor);
objQColor.setRed(22);
objQBrush.setColor( objQColor );
objQTextFrameFormat.setBorderBrush( objQBrush );
objQTextFrame->firstCursorPosition().insertFrame(objQTextFrameFormat);