QTextEdit实现富文本记事本
来源:互联网 发布:淘宝宝贝怎么上架 编辑:程序博客网 时间:2024/05/22 15:22
用Qt实现一个多功能记事本,
功能 :布局对齐,字体变换,颜色改变.
格式 :自动保存为rtf格式,支持txt格式,兼容MS Word打开.
涉及知识 :文件保存过滤器的使用,文件的输入输出流,光标的控制
可能会有一些小Bug
效果图如下:
/*---------------MyNotepad.h--------------------*/#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QAction>#include <QMenu>#include <QTextEdit>#include <QMenuBar>#include <QCloseEvent>#include <QLabel>class MainWindow : public QMainWindow{ Q_OBJECTpublic: MainWindow(QWidget *parent = 0); ~MainWindow(); void mergeFormat(QTextCharFormat fmt); bool boldcheck; bool Italiccheck; bool UnderLinecheck;private: QAction *fileNew; QAction *fileOpen; QAction *fileExit; QAction *fileSave; QAction *copyAct; QAction *pasteAct; QAction *cutAct; QAction *fontAct; QAction *colAct; QAction *selAct; QAction *timeAct; QAction *boldAct; QAction *underAct; QAction *italicAct; QAction *leftAct; QAction *rightAct; QAction *centerAct; QAction *about; QAction *aboutAuthor; QMenu *Menu; QTextEdit *textEdit; QLabel *lableft; QLabel *labright; void closeEvent(QCloseEvent *event);private slots: void newfile(); void openfile(); void exitfile(); void savefile(); void copyword(); void cutword(); void pasteword(); void selslot(); void colslot(); void fontslot(); void timeslot(); void italicslot(); void underslot(); void boldslot(); void showabout(); void layoutLeft(); void layoutRight(); void layoutCenter(); void showauthor();};#endif // MAINWINDOW_H/*---------------MyNotepad.h--------------------*/
/*---------------MyNotepad.cpp--------------------*/#include "mainwindow.h"#include <QTextCursor>#include <QFileDialog>#include <QFile>#include <QString>#include <QTextStream>#include <QMessageBox>#include <QHBoxLayout>#include <QMessageBox>#include <QColor>#include <QColorDialog>#include <QFont>#include <QFontDialog>#include <QDateTime>#include <QMovie>#include <QDesktopServices>MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent){ fileNew = new QAction(tr("新建"),this); fileNew->setShortcut(tr("Ctrl+N")); fileOpen = new QAction(tr("打开"),this); fileOpen->setShortcut(tr("Ctrl+O")); fileExit = new QAction(tr("退出"),this); fileExit->setShortcut(tr("Ctrl+Q")); fileSave = new QAction(tr("保存"),this); fileSave->setShortcut(tr("Ctrl+S")); copyAct = new QAction(tr("复制"),this); copyAct->setShortcut(tr("Ctrl+C")); pasteAct = new QAction(tr("粘贴"),this); pasteAct->setShortcut(tr("Ctrl+V")); cutAct = new QAction(tr("剪切"),this); cutAct->setShortcut(tr("Ctrl+X")); selAct = new QAction(tr("全选"),this); selAct->setShortcut(tr("Ctrl+A")); fontAct = new QAction(tr("改变字体"),this); fontAct->setShortcut(tr("Alt+F")); colAct = new QAction(tr("添加颜色"),this); colAct->setShortcut(tr("Alt+C")); timeAct = new QAction(tr("当前时间"),this); timeAct->setShortcut(tr("F5")); boldAct = new QAction(tr("加粗"),this); boldAct->setShortcut(tr("Ctrl+B")); italicAct = new QAction(tr("斜体"),this); italicAct->setShortcut(tr("Ctrl+I")); underAct= new QAction(tr("下划线"),this); underAct->setShortcut(tr("Ctrl+U")); leftAct = new QAction(tr("左对齐"),this); leftAct->setShortcut(tr("Ctrl+L")); rightAct = new QAction(tr("右对齐"),this); rightAct->setShortcut(tr("Ctrl+R")); centerAct = new QAction(tr("居中"),this); centerAct->setShortcut(tr("Ctrl+E")); about = new QAction(tr("关于"),this); aboutAuthor = new QAction(tr("关于作者"),this); Menu = menuBar()->addMenu(tr("文件(&D)")); Menu->addAction(fileNew); Menu->addAction(fileOpen); Menu->addAction(fileSave); Menu->addSeparator(); Menu->addAction(fileExit); Menu = menuBar()->addMenu(tr("编辑(&E)")); Menu->addAction(copyAct); Menu->addAction(cutAct); Menu->addAction(pasteAct); Menu->addAction(selAct); Menu = menuBar()->addMenu(tr("功能(&O)")); Menu->addAction(boldAct); Menu->addAction(italicAct); Menu->addAction(underAct); Menu->addSeparator(); Menu->addAction(fontAct); Menu->addAction(colAct); Menu->addAction(timeAct); Menu = menuBar()->addMenu(tr("布局(&V)")); Menu->addAction(centerAct); Menu->addAction(leftAct); Menu->addAction(rightAct); Menu = menuBar()->addMenu(tr("帮助(&H)")); Menu->addAction(about); Menu->addAction(aboutAuthor); boldcheck = true; Italiccheck = true; UnderLinecheck = true; QFont font1("Microsoft YaHei", 12); textEdit = new QTextEdit; textEdit->setFont(font1); textEdit->acceptRichText(); //textEdit->setStyleSheet("background-color: #C7EDCC;"); this->setWindowTitle(tr("萌萌哒o(≧∇≦o)~Editer")); this->resize(750,550); this->layout()->setMargin(20); this->setCentralWidget(textEdit); this->setWindowIcon(QIcon(":/notepad.ico")); connect(fileNew, SIGNAL(triggered()), this, SLOT(newfile())); connect(fileOpen, SIGNAL(triggered()), this, SLOT(openfile())); connect(fileExit, SIGNAL(triggered()), this, SLOT(exitfile())); connect(fileSave, SIGNAL(triggered()), this, SLOT(savefile())); connect(copyAct, SIGNAL(triggered()), this, SLOT(copyword())); connect(cutAct, SIGNAL(triggered()), this, SLOT(cutword())); connect(pasteAct, SIGNAL(triggered()), this, SLOT(pasteword())); connect(boldAct, SIGNAL(triggered()), this, SLOT(boldslot())); connect(italicAct, SIGNAL(triggered()), this, SLOT(italicslot())); connect(underAct, SIGNAL(triggered()), this, SLOT(underslot())); connect(fontAct, SIGNAL(triggered()), this, SLOT(fontslot())); connect(colAct, SIGNAL(triggered()), this, SLOT(colslot())); connect(selAct, SIGNAL(triggered()), this, SLOT(selslot())); connect(timeAct, SIGNAL(triggered()), this,SLOT(timeslot())); connect(leftAct, SIGNAL(triggered()), this, SLOT(layoutLeft())); connect(rightAct, SIGNAL(triggered()), this, SLOT(layoutRight())); connect(centerAct, SIGNAL(triggered()), this, SLOT(layoutCenter())); connect(aboutAuthor, SIGNAL(triggered()), this, SLOT(showauthor())); connect(about, SIGNAL(triggered()), this, SLOT(showabout()));}MainWindow::~MainWindow(){}void MainWindow::newfile(){ if(textEdit->document()->isModified()) { if( "" != textEdit->toPlainText() ) { QMessageBox::StandardButton select = QMessageBox::question(this, "",tr("是否要保存文件内容?"), QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel,QMessageBox::Yes); if(select == QMessageBox::Yes) { savefile(); textEdit->clear(); } if(select == QMessageBox::No) { textEdit->clear(); } if(select == QMessageBox::Cancel) { ; } } }}void MainWindow::openfile(){ QString filename = QFileDialog::getOpenFileName(this, tr("打开文件"), QDir::currentPath(), tr("富文本(*.rtf);;纯文本(*.txt)")); QString Path(filename); char *Tmppath = (char *)filename.toStdString().data(); for(int i = filename.length(); i > 0; --i) { if(Tmppath[i-1] == '/') { Tmppath += i; break; } } Path.sprintf("%s - %s",Tmppath, "萌萌哒o(≧∇≦o)~Editer" ); setWindowTitle(Path); QFile file(filename); if(file.open(QFile::ReadWrite)) { textEdit->clear(); QTextStream stream(&file); if(!stream.atEnd()) { textEdit->setText(stream.readAll()); } }}void MainWindow::exitfile(){ close();}void MainWindow::savefile(){ QFileDialog dialog(this,"保存文件","C:\\Users\\Administrator\\Desktop" ,tr("富文本(*.rtf);;纯文本(*.txt)")); dialog.setAcceptMode(QFileDialog::AcceptSave); QString filterMod; QString fileName; if(dialog.exec()) { fileName = dialog.selectedFiles()[0]; filterMod = dialog.selectedNameFilter(); } QFile file(fileName); if(file.open(QFile::WriteOnly |QFile::Truncate)) { QTextStream stream(&file); if("富文本(*.rtf)" == filterMod) stream<<textEdit->toHtml().toUtf8(); if("纯文本(*.txt)" == filterMod) { QMessageBox::StandardButton button = QMessageBox::warning(this, tr("提示"), QString(tr("保存为纯文本格式,颜色、字体等属性会丢失。\n确定要这样做么?")), QMessageBox::Yes|QMessageBox::No,QMessageBox::No); if(button == QMessageBox::Yes) { stream<<textEdit->toPlainText().toUtf8(); } else { ; } } } file.close();}void MainWindow::closeEvent(QCloseEvent *event){ QMessageBox::StandardButton button = QMessageBox::question(this, tr("退出程序"),QString(tr("是否退出")), QMessageBox::Yes|QMessageBox::No,QMessageBox::No); if(button == QMessageBox::Yes) { event->accept(); } else { event->ignore(); }}void MainWindow::copyword(){ textEdit->copy();}void MainWindow::cutword(){ textEdit->cut();}void MainWindow::pasteword(){ textEdit->paste();}void MainWindow::selslot(){ textEdit->selectAll();}void MainWindow::colslot(){ const QColorDialog::ColorDialogOptions options = QFlag(QColorDialog::ShowAlphaChannel); const QColor color = QColorDialog::getColor(Qt::green, this, tr("选择颜色"), options); if (color.isValid()) { textEdit->setTextColor(color); }}void MainWindow::fontslot(){ bool ok; QFont font = QFontDialog::getFont( &ok, QFont(tr("微软雅黑"), 15), this); if (ok) { //textEdit->setFont(font); QTextCharFormat fmt; fmt.setFont(font); mergeFormat(fmt); } else { ; }}void MainWindow::timeslot(){ textEdit->append(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"));}//设置光标的选区,使格式作用于选区内的字符void MainWindow::mergeFormat(QTextCharFormat fmt){ QTextCursor cursor = textEdit->textCursor(); if (!cursor.hasSelection()) { cursor.select(QTextCursor::WordUnderCursor); } cursor.mergeCharFormat(fmt);}//加粗void MainWindow::boldslot(){ QTextCharFormat fmt; fmt.setFontWeight(boldcheck ? QFont::Bold : QFont::Normal); mergeFormat(fmt); boldcheck = !boldcheck;}//倾斜void MainWindow::italicslot(){ QTextCharFormat fmt; fmt.setFontItalic(Italiccheck ? true : false); mergeFormat(fmt); Italiccheck = !Italiccheck;}//下划线void MainWindow::underslot(){ QTextCharFormat fmt; fmt.setFontUnderline(UnderLinecheck ? true : false); mergeFormat(fmt); UnderLinecheck = !UnderLinecheck;}//左对齐void MainWindow::layoutLeft(){ if ( textEdit->alignment() != Qt::AlignLeft ) textEdit->setAlignment(Qt::AlignLeft); else textEdit->setAlignment( textEdit->alignment() ^ Qt::AlignLeft);}//居中对齐void MainWindow::layoutCenter(){ if ( textEdit->alignment() != Qt::AlignCenter ) textEdit->setAlignment(Qt::AlignCenter); else textEdit->setAlignment( textEdit->alignment() ^ Qt::AlignCenter);}void MainWindow::showauthor(){ QDesktopServices::openUrl(QUrl("http://blog.csdn.net/sinat_29173167"));}//右对齐void MainWindow::layoutRight(){ if ( textEdit->alignment() != Qt::AlignRight ) textEdit->setAlignment(Qt::AlignRight); else textEdit->setAlignment( textEdit->alignment() ^ Qt::AlignRight);}void MainWindow::showabout(){ QDialog *w; w = new QDialog(this); w->setWindowTitle(tr("关于 - 萌萌哒o(≧∇≦o)~Editer")); w->setFixedHeight(200); w->setFixedWidth(400); QMovie *gif = new QMovie(":/panda.gif"); lableft = new QLabel(w); lableft->setMovie(gif); //lableft->setSizePolicy(QSizePolicy::horizontalPolicy(),QSizePolicy::verticalStretch()); //lableft->resize(gif->width(),gif->height()); gif->start(); labright = new QLabel(w); QFont ft("Microsoft YaHei", 10); ft.setBold(25); labright->setFont(ft); labright->setText(tr("Plantform: Win/Linux\n\nAll Copyleft Reseverd.")); QHBoxLayout *layout = new QHBoxLayout(w); layout->setSpacing(25); layout->setMargin(10); layout->addWidget(lableft); layout->addWidget(labright); w->exec(); delete w;}/*---------------MyNotepad.cpp--------------------*/
/*---------------main.cpp--------------------*/#include "mainwindow.h"#include <QApplication>#include <QTextCodec>#include <QMessageBox>int main(int argc, char *argv[]){ QApplication a(argc, argv); MainWindow w; w.show(); return a.exec();}/*---------------main.cpp--------------------*/
0 0
- QTextEdit实现富文本记事本
- QtCreator 富文本使用,QTextEdit,QTextBlock,QTextFrame,QTextTable,QTextList,QTextImage
- NSMutableAttributedString实现富文本
- SpannableString实现富文本
- weex 实现富文本
- android上实现富文本
- NSMutableAttributedString富文本的实现
- android富文本的实现
- iOS NSMutableAttributedString 实现富文本
- ue4实现富文本提示
- JS实现富文本编辑器
- 使用NSMutableAttributedString 实现富文本
- iOS NSMutableAttributedString 实现富文本
- 富文本编辑器XHEditor实现
- QTextEdit选择文本
- QTextEdit限制文本长度
- QTextEdit选择文本
- 用QTextEdit写的一个记事本
- Unity 灯光Shader
- mysql视图详解
- Oracle中通过substr和instr实现截取指定字符之间的字符串:
- HADOOP ssh设置密码
- 很久很久前初学Java时的笔记--正则表达式+包装类
- QTextEdit实现富文本记事本
- 学习类博客!
- 使用Spring CommonsMultipartResolver 上传文件
- css动画效果
- jsp的三种指令标签
- HDU3572Task Schedule(任务分配/最大流判断满流)
- 动态代理(转载)
- hive异常MetaException-Metastore contains multiple versions
- kendo ui表格最后一行无下划线、分页布局中问题