QT多功能编辑器(2)

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;
}


转载于:https://my.oschina.net/u/2400526/blog/469664

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值