如何在QPlainTextEdit和QTextCursor中使用QTextFrame?

时间:2020-09-06 11:28:01

标签: c++ qt

我的目的是在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);
    

0 个答案:

没有答案