#include "DemandEdit.h"
#include "ui_DemandEdit.h"
#include <QFile>
#include <QFileDialog>
#include <QFileInfo>
#include <QMessageBox>
#include <QTextDocumentWriter>
#include <QColorDialog>
#include <QFontComboBox>
#include <QTextCodec>
#include <QTextCursor>
#include <QTextList>
#include <QClipboard>//剪切板
#include <QApplication>
#include <QMimeData>
#include <QImageReader>
#include <QTextTableCellFormat>
#include <QInputDialog>
#include <QMenu>
#pragma execution_character_set("utf-8")
DemandEdit::DemandEdit(QWidget *parent /*= 0*/) :
QWidget(parent),
ui(new Ui::DemandEdit)
{
ui->setupUi(this);
//初始化
Init();
//当前字符更改信号
connect(ui->textEdit, SIGNAL(currentCharFormatChanged(const QTextCharFormat &)),
this, SLOT(currentCharFormatChanged(const QTextCharFormat &)));
//光标位置更改信号
connect(ui->textEdit, SIGNAL(cursorPositionChanged()),
this, SLOT(cursorPositionChanged()));
connect(ui->textEdit->document(), SIGNAL(modificationChanged(bool)),
ui->btn_save, SLOT(setEnabled(bool)));
connect(ui->textEdit->document(), &QTextDocument::modificationChanged,
this, &QWidget::setWindowModified);
connect(ui->textEdit->document(), SIGNAL(undoAvailable(bool)),
ui->btn_undo, SLOT(setEnabled(bool)));
connect(ui->textEdit->document(),SIGNAL(redoAvailable(bool)),
ui->btn_redo, SLOT(setEnabled(bool)));
setWindowModified(ui->textEdit->document()->isModified());
ui->btn_save->setEnabled(ui->textEdit->document()->isModified());
ui->btn_undo->setEnabled(ui->textEdit->document()->isUndoAvailable());
ui->btn_redo->setEnabled(ui->textEdit->document()->isRedoAvailable());
connect(QApplication::clipboard(), &QClipboard::dataChanged, this, &DemandEdit::clipboardDataChanged);
//右键菜单
ui->textEdit->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui->textEdit, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(on_ContextMenuRequested(const QPoint &)));
}
DemandEdit::~DemandEdit()
{
delete ui;
}
//初始化
void DemandEdit::Init()
{
//初始化标签下拉框
ui->cb_sign->addItem("Standard");
ui->cb_sign->addItem("Bullet List (Disc)");
ui->cb_sign->addItem("Bullet List (Circle)");
ui->cb_sign->addItem("Bullet List (Square)");
ui->cb_sign->addItem("Ordered List (Decimal)");
ui->cb_sign->addItem("Ordered List (Alpha lower)");
ui->cb_sign->addItem("Ordered List (Alpha upper)");
ui->cb_sign->addItem("Ordered List (Roman lower)");
ui->cb_sign->addItem("Ordered List (Roman upper)");
//初始化字号下拉框
const QList<int> standardSizes = QFontDatabase::standardSizes();
foreach(int size, standardSizes)
ui->cb_size->addItem(QString::number(size));
ui->cb_size->setCurrentIndex(standardSizes.indexOf(QApplication::font().pointSize()));
//加粗
QFont bold;
bold.setBold(true);
ui->btn_bold->setFont(bold);
ui->btn_bold->setCheckable(true);
//倾斜
QFont italic;
italic.setItalic(true);
ui->btn_italic->setFont(italic);
ui->btn_italic->setCheckable(true);
//下划线
QFont underline;
underline.setUnderline(true);
ui->btn_underline->setFont(underline);
ui->btn_underline->setCheckable(true);
ui->btn_left->setShortcut(Qt::CTRL + Qt::Key_L);
ui->btn_left->setCheckable(true);
ui->btn_center->setShortcut(Qt::CTRL + Qt::Key_E);
ui->btn_center->setCheckable(true);
ui->btn_right->setShortcut(Qt::CTRL + Qt::Key_R);
ui->btn_right->setCheckable(true);
ui->btn_justify->setShortcut(Qt::CTRL + Qt::Key_J);
ui->btn_justify->setCheckable(true);
QFont textFont("Helvetica");
textFont.setStyleHint(QFont::SansSerif);
ui->textEdit->setFont(textFont);
fontChanged(ui->textEdit->font());
colorChanged(ui->textEdit->textColor());
alignmentChanged(ui->textEdit->alignment());
//行间距 默认设为10
ui->lineHeightspinBox->setValue(10);
on_lineHeightspinBox_valueChanged(QString("10"));
}
void DemandEdit::setCurrentFileName(const QString &fileName)
{
m_fileName = fileName;
ui->textEdit->document()->setModified(false);
QString shownName;
if (fileName.isEmpty())
shownName = "untitled.txt";
else
shownName = QFileInfo(fileName).fileName();
setWindowModified(false);
}
bool DemandEdit::load(const QString &f)
{
if (!QFile::exists(f))
return false;
QFile file(f);
if (!file.open(QFile::ReadOnly))
return false;
QByteArray data = file.readAll();
QTextCodec *codec = Qt::codecForHtml(data);
QString str = codec->toUnicode(data);
if (Qt::mightBeRichText(str))
{
ui->textEdit->setHtml(str);
}
else
{
str = QString::fromLocal8Bit(data);
ui->textEdit->setPlainText(str);
}
setCurrentFileName(f);
return true;
}
bool DemandEdit::fileSave()
{
if (m_fileName.isEmpty())
return fileSaveAs();
if (m_fileName.startsWith(QStringLiteral(":/")))
return fileSaveAs();
QTextDocumentWriter writer(m_fileName);
bool success = writer.write(ui->textEdit->document());
if (success)
{
ui->textEdit->document()->setModified(false);
QMessageBox::information(this, QString("提示"), QString("Wrote %1").arg(QDir::toNativeSeparators(m_fileName)));
}
else
{
QMessageBox::information(this, QString("提示"), QString("Could not write to file %1").arg(QDir::toNativeSeparators(m_fileName)));
}
return success;
}
bool DemandEdit::fileSaveAs()
{
QFileDialog fileDialog(this, tr("Save as..."));
fileDialog.setAcceptMode(QFileDialog::AcceptSave);
QStringList mimeTypes;
mimeTypes << "application/vnd.oasis.opendocument.text" << "text/html" << "text/plain";
fileDialog.setMimeTypeFilters(mimeTypes);
fileDialog.setDefaultSuffix("odt");
if (fileDialog.exec() != QDialog::Accepted)
return false;
const QString fn = fileDialog.selectedFiles().first();
setCurrentFileName(fn);
return fileSave();
}
void DemandEdit::mergeFormatOnWordOrSelection(const QTextCharFormat &format)
{
QTextCursor cursor = ui->textEdit->textCursor();
if (!cursor.hasSelection())
cursor.select(QTextCursor::WordUnderCursor);
cursor.mergeCharFormat(format);
ui->textEdit->mergeCurrentCharFormat(format);
}
//************************************
// 方法名称: fontChanged
// 概要: 字体变化
// 方法全称: DemandEdit::fontChanged
// 访问权限: private
// 返回值: void
// 参数: const QFont & f
//************************************
void DemandEdit::fontChanged(const QFont & f)
{
ui->cb_font->setCurrentIndex(ui->cb_font->findText(QFontInfo(f).family()));
ui->cb_size->setCurrentIndex(ui->cb_size->findText(QString::number(f.pointSize())));
ui->btn_bold->setChecked(f.bold());
ui->btn_italic->setChecked(f.italic());
ui->btn_underline->setChecked(f.underline());
}
//************************************
// 方法名称: colorChanged
// 概要: 颜色变化
// 方法全称: DemandEdit::colorChanged
// 访问权限: private
// 返回值: void
// 参数: const QColor & c
//************************************
void DemandEdit::colorChanged(const QColor & c)
{
QPixmap pix(20, 20);
pix.fill(c);
ui->btn_color->setIcon(pix);
}
//************************************
// 方法名称: alignmentChanged
// 概要: 对齐方式变化
// 方法全称: DemandEdit::alignmentChanged
// 访问权限: private
// 返回值: void
// 参数: Qt::Alignment a
//************************************
void DemandEdit::alignmentChanged(Qt::Alignment a)
{
if (a & Qt::AlignLeft)
{
ui->btn_left->setChecked(true);
ui->btn_center->setChecked(false);
ui->btn_right->setChecked(false);
ui->btn_justify->setChecked(false);
}
else if (a & Qt::AlignHCenter)
{
ui->btn_center->setChecked(true);
ui->btn_left->setChecked(false);
ui->btn_right->setChecked(false);
ui->btn_justify->setChecked(false);
}
else if (a & Qt::AlignRight)
{
ui->btn_right->setChecked(true);
ui->btn_left->setChecked(fa
评论10