0
点赞
收藏
分享

微信扫一扫

Qt输入框中输入图片


Qt输入框中输入图片_#ifndef

#ifndef WINDOW_H
#define WINDOW_H

#include <QWidget>
#include <QTextFormat>

QT_BEGIN_NAMESPACE
class QTextEdit;
class QLineEdit;
class QPushButton;
class QLabel;
QT_END_NAMESPACE

//![0]
class Window : public QWidget
{
Q_OBJECT

public:
enum { SvgTextFormat = QTextFormat::UserObject + 1 };
enum SvgProperties { SvgData = 1 };

Window();

private slots:
void insertTextObject();

private:
void setupTextObject();
void setupGui();

private:
QTextEdit *textEdit;
QLabel *fileNameLabel;
QLineEdit *fileNameLineEdit;
QPushButton *insertTextObjectButton;
};
//![0]

#endif

#include <QtWidgets>
#include <QtSvg>

#include "window.h"
#include "svgtextobject.h"

Window::Window()
{
setupGui();
setupTextObject();

setWindowTitle("Text Object Example");
}

//![1]
void Window::insertTextObject()
{
QString fileName = fileNameLineEdit->text();
QFile file(fileName);
if (!file.open(QIODevice::ReadOnly)) {
QMessageBox::warning(this, tr("Error Opening File"),
tr("Could not open '%1'").arg(fileName));
}

QByteArray svgData = file.readAll();
//![1]

//![2]
QTextCharFormat svgCharFormat;
svgCharFormat.setObjectType(SvgTextFormat);
QSvgRenderer renderer(svgData);

QImage svgBufferImage(renderer.defaultSize(), QImage::Format_ARGB32);
QPainter painter(&svgBufferImage);
renderer.render(&painter, svgBufferImage.rect());

svgCharFormat.setProperty(SvgData, svgBufferImage);

QTextCursor cursor = textEdit->textCursor();
cursor.insertText(QString(QChar::ObjectReplacementCharacter), svgCharFormat);
textEdit->setTextCursor(cursor);
}
//![2]

//![3]
void Window::setupTextObject()
{
QObject *svgInterface = new SvgTextObject;
svgInterface->setParent(this);
textEdit->document()->documentLayout()->registerHandler(SvgTextFormat, svgInterface);
}
//![3]

void Window::setupGui()
{
fileNameLabel = new QLabel(tr("Svg File Name:"));
fileNameLineEdit = new QLineEdit;
insertTextObjectButton = new QPushButton(tr("Insert Image"));

fileNameLineEdit->setText(":/files/heart.svg");
connect(insertTextObjectButton, SIGNAL(clicked()),
this, SLOT(insertTextObject()));

QHBoxLayout *bottomLayout = new QHBoxLayout;
bottomLayout->addWidget(fileNameLabel);
bottomLayout->addWidget(fileNameLineEdit);
bottomLayout->addWidget(insertTextObjectButton);

textEdit = new QTextEdit;

QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(textEdit);
mainLayout->addLayout(bottomLayout);

setLayout(mainLayout);
}

举报

相关推荐

0 条评论