notepad.cpp代码
#include "notepad.h"
#include <QInputDialog>
#include <QTextCursor>
#include <QPixmap>
Notepad::Notepad(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Notepad)
{
ui->setupUi(this);
}
Notepad::~Notepad()
{
delete ui;
}
void Notepad::on_actionNew_N_triggered() //新建
{
if(!ui->textEdit->toPlainText().isEmpty())
{
if(isModified)
{
if(QMessageBox::warning(this,"close","save or not",
QMessageBox::Cancel|QMessageBox::Ok) ==QMessageBox::Ok)
{
on_actionSave_S_triggered();
ui->textEdit->clear();
filename.clear();
}
}
}
}
void Notepad::on_actionSave_S_triggered() //保存
{
if(isModified)
{
if(filename.isEmpty())
{
filename = QFileDialog::getSaveFileName(this,"save",QDir::homePath());
}
QFile file(filename);
file.open(QFile::WriteOnly);
QApplication::setOverrideCursor(Qt::WaitCursor);
QTextStream out(&file);
out<<ui->textEdit->toPlainText();
QApplication::restoreOverrideCursor();
file.close();
isModified = false;
}//xml
}
void Notepad::on_actionSave_as_A_triggered() //另存为
{
filename = QFileDialog::getSaveFileName(this,
"另存为",QDir::homePath());
QFile file(filename);
file.open(QFile::WriteOnly);
QApplication::setOverrideCursor(Qt::WaitCursor);
QTextStream out(&file);
out<<ui->textEdit->toPlainText();
QApplication::restoreOverrideCursor();
file.close();
isModified = false;
}
void Notepad::on_actionExit_E_triggered() //退出
{
close();
}
void Notepad::on_action_triggered() //设置字体
{
bool ok;
QFont font = QFontDialog::getFont(&ok);
if(ok == true)
{
ui->textEdit->setFont(font);
}
else
{
QMessageBox::information(this,"Error Message","Please set the right font");
}
}
void Notepad::on_actionOpen_O_triggered() //打开
{
QString str = QFileDialog::getOpenFileName(this,"open",QDir::homePath());
if(!str.isEmpty())
{
filename = str;
QFile file(filename);
file.open(QFile::ReadOnly | QFile::Text);
QTextStream in(&file);
QApplication::setOverrideCursor(Qt::WaitCursor);
ui->textEdit->setText(in.readAll());
QApplication::restoreOverrideCursor();
}
}
void Notepad::on_actionCopy_C_triggered() //复制
{
ui->textEdit->copy();
}
void Notepad::on_action_P_triggered() //黏贴
{
ui->textEdit->paste();
}
void Notepad::on_actionCut_C_triggered() //剪切
{
ui->textEdit->cut();
}
void Notepad::on_action_Z_triggered() //撤销
{
ui->textEdit->undo();
}
void Notepad::on_action_redo_triggered() //重做
{
ui->textEdit->redo();
}
void Notepad::on_action_textcolor_triggered() //设置字体颜色
{
QColor color = QColorDialog::getColor(Qt::red,this);
if(color.isValid())
{
ui->textEdit->setTextColor(color);
}
else
{
QMessageBox::information(this,"Error Message","Please set the right color");
}
}
void Notepad::on_action_D_triggered() //获取系统时间
{
QDateTime current = QDateTime::currentDateTime();
QString time = current.toString("yyyy-M-dd hh:mm:ss");
ui->textEdit->append(time);
}
void Notepad::on_action_F_triggered() //查找
{
QDialog *fcd = new QDialog(this);
fcd->setWindowTitle("find");
find_textcontent = new QLineEdit(fcd);
QPushButton *find_button = new QPushButton("next",fcd);
QVBoxLayout *layout = new QVBoxLayout(fcd);
layout->addWidget(find_textcontent);
layout->addWidget(find_button);
connect(find_button,SIGNAL(clicked()),this,SLOT(show_find_TextContent()));
fcd->show();
}
void Notepad::show_find_TextContent()
{
QString findtext = find_textcontent->text();
bool findornot = ui->textEdit->find(findtext,QTextDocument::FindBackward);
if(findornot == false)
{
QMessageBox::information(this,"find","not find");
}
if(findornot)
{
ui->label->setText( tr("at target: linenum:%1 colnum:%2")
.arg(ui->textEdit->textCursor().blockNumber())
.arg(ui->textEdit->textCursor().columnNumber()));
}
}
void Notepad::on_action_R_triggered() //替换
{
QDialog *replace = new QDialog(this);
replace->setWindowTitle("replace");
find_textcontent = new QLineEdit(replace);
replace_textcontent = new QLineEdit(replace);
QPushButton *replace_button = new QPushButton("replace",replace);
QVBoxLayout *layout = new QVBoxLayout(replace);
layout->addWidget(find_textcontent);
layout->addWidget(replace_textcontent);
layout->addWidget(replace_button);
replace->show();
connect(replace_button,SIGNAL(clicked()),this,SLOT(show_replace_TextContent()));
}
void Notepad::show_replace_TextContent()
{
show_find_TextContent();
if(ui->textEdit->textCursor().hasSelection())
{
ui->textEdit->textCursor().insertText(replace_textcontent->text());
}
}
void Notepad::on_action_A_triggered() //全选
{
ui->textEdit->selectAll();
}
void Notepad::on_action_about_triggered()
{
QMessageBox::about(this, tr("About Application"),
tr("The <b>Application</b> example demonstrates how to "
"write modern GUI applications using Qt, with a menu bar, "
"toolbars, and a status bar."));
}
void Notepad::closeEvent(QCloseEvent *e){
if(!ui->textEdit->toPlainText().isEmpty())
{
if(isModified)
{
QMessageBox box;
box.setText("The document has been modified.");
box.setInformativeText("Do you want to save your changes?");
box.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
int ret = box.exec();
switch (ret) {
case QMessageBox::Save:
on_actionSave_S_triggered();
break;
case QMessageBox::Cancel:
e->ignore();
default:
break;
}
}
}
}
void Notepad::on_actionPic_triggered() // 插入图片
{
QTextImageFormat format;
QString PicName = QFileDialog::getOpenFileName ( this, "Insert Picture","/" );
if(!PicName.isEmpty())
{
format.setName(PicName); //
format.setHeight(500); //设置图片的长宽
format.setWidth(500);
ui->textEdit->textCursor().insertImage(format);
// if(filename.isEmpty())
// {
// filename = QFileDialog::getSaveFileName(this,"save",QDir::homePath());
// }
// QPixmap::save (filename,0,1);
}
}
void Notepad::on_actionTable_triggered()// 插入表格
{
QTextCursor cursor = ui->textEdit->textCursor();
QTextTableFormat format;
bool ok1;
bool ok2;
int n = QInputDialog::getInt(this, "insert a table","Set the table rows",
2,0, 100, 1, &ok1);
if (ok1)
{
int m = QInputDialog::getInt(this, "insert a table","Set the table columns",
2, 0, 100, 1, &ok2);
if(ok2)
{
format.setCellSpacing(2);
format.setCellPadding(10);
cursor.insertTable(n,m,format);
}
}
}
void Notepad::on_action_linewrap_toggled(bool arg1)
{
ui->textEdit->setLineWrapMode(QTextEdit::NoWrap);
}
void Notepad::on_actionPrint_triggered()
{
QPrinter printer(QPrinter::HighResolution);
QPrintDialog *dlg = new QPrintDialog(&printer,this);
if(ui->textEdit->textCursor().hasSelection())
dlg->addEnabledOption(QAbstractPrintDialog::PrintSelection);
dlg->setWindowTitle("Print Document");
if(dlg->exec()==QDialog::Accepted)
ui->textEdit->print(&printer);
delete dlg;
}
void Notepad::on_actionprintview_triggered()
{
QPrinter printer;
QPrintPreviewDialog preview(&printer, this);
connect(&preview,SIGNAL(paintRequested(QPrinter*)),
this,SLOT(printPreview(QPrinter*)));
preview.exec();
}
void Notepad::printPreview(QPrinter *printer)
{
ui->textEdit->print(printer);
}
//QProcess::startDetached("C:\\Windows\\System32\\calc.exe",QStringList());
void Notepad::on_actionprintPDF_triggered() //转换为PDF格式
{
QString Pdffilename = QFileDialog::getSaveFileName(this,"save PDF",QDir::homePath(),"*.pdf");
if(!Pdffilename.isEmpty())
{
if(QFileInfo(Pdffilename).suffix().isEmpty())
Pdffilename.append(".pdf");
QPrinter printer(QPrinter::HighResolution);
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setOutputFileName(Pdffilename);
ui->textEdit->document()->print(&printer);
}
}
void Notepad::on_actionAlignCenter_triggered() //居中对齐
{
ui->textEdit->setAlignment(Qt::AlignCenter);
}
void Notepad::on_actionAlignLeft_triggered() //左文本对齐
{
ui->textEdit->setAlignment(Qt::AlignLeft|Qt::AlignAbsolute);
}
void Notepad::on_actionAlignRight_triggered() //右文本对齐
{
ui->textEdit->setAlignment(Qt::AlignRight|Qt::AlignAbsolute);
}
void Notepad::on_actionAlignJustify_triggered() //分散对齐
{
ui->textEdit->setAlignment(Qt::AlignJustify);
}
void Notepad::on_textEdit_textChanged() //文本框改变发出信号
{
isModified = true;
}