WPS文档操作






具体代码

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include "childwnd.h"
#include <QSignalMapper>
#include <QWidget>
#include <QMdiSubWindow>namespace Ui {class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();void initMainWindow();void docNew();void docOpen();void docSave();void docSaveAs();void docUndo();void docRedo();void docCut();void docCopy();void docPaste();private slots:void on_newAction_triggered();void refreshMenus();void addSubWndListMenu();void on_closeAction_triggered();void on_closeAllAction_triggered();void on_titleAction_triggered();void on_cascadeAction_triggered();void on_nextAction_triggered();void on_previousAction_triggered();void setActiveSubWindow(QWidget *wnd);void on_openAction_triggered();void on_saveAction_triggered();void on_saveAsAction_triggered();void on_undoAction_triggered();void on_redoAction_triggered();void on_cutAction_triggered();void on_copyAction_triggered();void on_pasteAction_triggered();protected:void closeEvent(QCloseEvent *event);private:void formatEnabled();ChildWnd* activateChildWnd();QMdiSubWindow *findChildWnd(const QString& docName);private:Ui::MainWindow *ui;QSignalMapper *m_WndMapper; //信号映射器};#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "childwnd.h"
#include <QFontDatabase>
#include <QMdiSubWindow>
#include <QCloseEvent>
#include <QFileDialog>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);initMainWindow();
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::initMainWindow()
{//初始化字号列表项QFontDatabase fontdb;foreach(int fontsize, fontdb.standardSizes()){ui->sizeComboBox->addItem(QString::number(fontsize));}QFont defFont;    //当前应用程序默认的字体QString sFontSize;int defFontSize;  //当前应用程序默认字体的字号int defFontindex; //当前字号在组合框中的索引号defFont = QApplication::font();defFontSize = defFont.pointSize();sFontSize = QString::number(defFontSize);defFontindex = ui->sizeComboBox->findText(sFontSize);ui->sizeComboBox->setCurrentIndex(defFontindex);//设置多文档区域滚动条ui->mdiArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);ui->mdiArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);refreshMenus();connect(ui->mdiArea, &QMdiArea::subWindowActivated, this, &MainWindow::refreshMenus);addSubWndListMenu();connect(ui->menu_W, &QMenu::aboutToShow, this, &MainWindow::addSubWndListMenu);//创建信号映射器m_WndMapper = new QSignalMapper(this);connect(m_WndMapper, SIGNAL(mapped(QWidget*)), this, SLOT(setActiveSubWindow(QWidget*)));}void MainWindow::docNew()
{ChildWnd* childwnd = new ChildWnd;ui->mdiArea->addSubWindow(childwnd);connect(childwnd, SIGNAL(copyAvailable(bool)), ui->cutAction, SLOT(setEnabled(bool)));connect(childwnd, SIGNAL(copyAvailable(bool)), ui->copyAction, SLOT(setEnabled(bool)));childwnd->newDoc();childwnd->show();formatEnabled();
}void MainWindow::docOpen()
{QString docName = QFileDialog::getOpenFileName(this, "打开文档", "", "文本文件(*.txt);;HTML文件(*.html *.htm);;所有文件(*.*)");if (!docName.isEmpty()){QMdiSubWindow *existWnd = findChildWnd(docName);if (existWnd){ui->mdiArea->setActiveSubWindow(existWnd);return;}ChildWnd *childWnd = new ChildWnd;ui->mdiArea->addSubWindow(childWnd);connect(childWnd, SIGNAL(copyAvailable(bool)), ui->cutAction, SLOT(setEnabled(bool)));connect(childWnd, SIGNAL(copyAvailable(bool)), ui->copyAction, SLOT(setEnabled(bool)));if (childWnd->loadDoc(docName)){statusBar()->showMessage("文档已打开", 3000);childWnd->show();formatEnabled();}else{childWnd->close();}}
}void MainWindow::docSave()
{if (activateChildWnd() && activateChildWnd()->saveDoc()){statusBar()->showMessage("保存成功", 3000);}
}void MainWindow::docSaveAs()
{if (activateChildWnd() && activateChildWnd()->saveAsDoc()){statusBar()->showMessage("保存成功", 3000);}
}void MainWindow::docUndo()
{if (activateChildWnd()){activateChildWnd()->undo();}
}void MainWindow::docRedo()
{if (activateChildWnd())activateChildWnd()->redo();
}void MainWindow::docCut()
{if (activateChildWnd())activateChildWnd()->cut();
}void MainWindow::docCopy()
{if (activateChildWnd())activateChildWnd()->copy();
}void MainWindow::docPaste()
{if (activateChildWnd())activateChildWnd()->paste();
}void MainWindow::on_newAction_triggered()
{docNew();
}void MainWindow::refreshMenus()
{bool hasChild;hasChild = (activateChildWnd() != 0);ui->saveAction->setEnabled(hasChild);ui->saveAsAction->setEnabled(hasChild);ui->printAction->setEnabled(hasChild);ui->printPreviewAction->setEnabled(hasChild);ui->pasteAction->setEnabled(hasChild);ui->closeAction->setEnabled(hasChild);ui->closeAllAction->setEnabled(hasChild);ui->titleAction->setEnabled(hasChild);ui->cascadeAction->setEnabled(hasChild);ui->nextAction->setEnabled(hasChild);ui->previousAction->setEnabled(hasChild);//文档打开且有内容选中bool hasSelect = ( activateChildWnd() && activateChildWnd()->textCursor().hasSelection() );ui->cutAction->setEnabled(hasSelect);ui->copyAction->setEnabled(hasSelect);ui->boldAction->setEnabled(hasSelect);ui->italicAction->setEnabled(hasSelect);ui->underlineAction->setEnabled(hasSelect);ui->leftAlignAction->setEnabled(hasSelect);ui->centerAction->setEnabled(hasSelect);ui->rightlignAction->setEnabled(hasSelect);ui->justifyAction->setEnabled(hasSelect);ui->colorAction->setEnabled(hasSelect);}void MainWindow::addSubWndListMenu()
{ui->menu_W->clear();ui->menu_W->addAction(ui->closeAction);ui->menu_W->addAction(ui->closeAllAction);ui->menu_W->addSeparator();ui->menu_W->addAction(ui->titleAction);ui->menu_W->addAction(ui->cascadeAction);ui->menu_W->addSeparator();ui->menu_W->addAction(ui->nextAction);ui->menu_W->addAction(ui->previousAction);QList<QMdiSubWindow*> wnds = ui->mdiArea->subWindowList();if (!wnds.isEmpty()) ui->menu_W->addSeparator();for (int i = 0; i < wnds.size(); ++i){ChildWnd *childWnd = qobject_cast<ChildWnd*>(wnds.at(i)->widget());QString menuitem_text;menuitem_text = QString("%1 %2").arg(i+1).arg(childWnd->getCurDocName());QAction *menuitem_act = ui->menu_W->addAction(menuitem_text);menuitem_act->setCheckable(true);menuitem_act->setChecked(childWnd == activateChildWnd());connect(menuitem_act, SIGNAL(triggered(bool)), m_WndMapper, SLOT(map()));m_WndMapper->setMapping(menuitem_act, wnds.at(i));}formatEnabled();
}void MainWindow::formatEnabled()
{ui->boldAction->setEnabled(true);ui->italicAction->setEnabled(true);ui->underlineAction->setEnabled(true);ui->leftAlignAction->setEnabled(true);ui->centerAction->setEnabled(true);ui->rightlignAction->setEnabled(true);ui->justifyAction->setEnabled(true);ui->colorAction->setEnabled(true);
}ChildWnd *MainWindow::activateChildWnd()
{QMdiSubWindow* actWnd = ui->mdiArea->activeSubWindow();if (actWnd)return qobject_cast<ChildWnd*>(actWnd->widget());elsereturn 0;
}QMdiSubWindow *MainWindow::findChildWnd(const QString &docName)
{QString strFile = QFileInfo(docName).canonicalFilePath();foreach(QMdiSubWindow *subWnd, ui->mdiArea->subWindowList()){ChildWnd *chilWnd = qobject_cast<ChildWnd*>(subWnd->widget());if (chilWnd->m_CurDocPath == strFile) return subWnd;}return 0;
}//QMdiSubWindow *MainWindow::findChild(const QString &docName)
//{//    QString strFile = QFileInfo(docName).canonicalFilePath();
//    foreach(QMdiSubWindow *subWnd, ui->mdiArea->subWindowList())
//    {//        ChildWnd *chilWnd = qobject_cast<ChildWnd*>(subWnd->widget());
//        if (chilWnd->m_CurDocPath == strFile) return subWnd;
//    }//    return 0;
//}void MainWindow::on_closeAction_triggered()
{ui->mdiArea->closeActiveSubWindow();
}void MainWindow::on_closeAllAction_triggered()
{ui->mdiArea->closeAllSubWindows();
}void MainWindow::on_titleAction_triggered()
{ui->mdiArea->tileSubWindows();
}void MainWindow::on_cascadeAction_triggered()
{ui->mdiArea->cascadeSubWindows();
}void MainWindow::on_nextAction_triggered()
{ui->mdiArea->activateNextSubWindow();
}void MainWindow::on_previousAction_triggered()
{ui->mdiArea->activatePreviousSubWindow();
}void MainWindow::setActiveSubWindow(QWidget *wnd)
{if (!wnd) return;ui->mdiArea->setActiveSubWindow(qobject_cast<QMdiSubWindow*>(wnd));}void MainWindow::closeEvent(QCloseEvent *event)
{ui->mdiArea->closeAllSubWindows();if (ui->mdiArea->currentSubWindow())event->ignore(); //忽略此事件elseevent->accept(); //接收此事件}void MainWindow::on_openAction_triggered()
{docOpen();
}void MainWindow::on_saveAction_triggered()
{docSave();
}void MainWindow::on_saveAsAction_triggered()
{docSaveAs();
}void MainWindow::on_undoAction_triggered()
{docUndo();
}void MainWindow::on_redoAction_triggered()
{docRedo();
}void MainWindow::on_cutAction_triggered()
{docCut();
}void MainWindow::on_copyAction_triggered()
{docCopy();
}void MainWindow::on_pasteAction_triggered()
{docPaste();
}

测试结果没有问题 ok

结语:

其他代码不用动.

时间: 2020-08-09

Qt - WPS文本编辑器(WPS文档操作)相关推荐

  1. Qt - WPS文本编辑器(WPS文档打印预览)

    WPS文档打印预览 具体代码 mainwind.h #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #inc ...

  2. Qt - WPS文本编辑器(WPS新建文档)

    WPS新建文档 - 功能实现 具体代码 #include "mainwindow.h" #include <QApplication>int main(int argc ...

  3. Qt - WPS文本编辑器(WPS字体格式)

    WPS字体格式 Shift + F5 结束断点调试 √选上 mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMa ...

  4. Qt - WPS文本编辑器(WPS段落对齐)

    WPS段落对齐 具体代码 mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #inc ...

  5. html单文档编辑器,用VC++MFC做文本编辑器(单文档模式)

    原来做过一个用对话框实现的文本编辑器,其实用MFC模板里面的单文档模板也可以做,甚至更加方便,适合入门级的爱好者试试,现介绍方法如下: < xmlnamespace prefix =" ...

  6. WPS本地镜像化在线文档操作以及样例

    一个客户项目有引进在线文档操作需求,让我这边做一个demo调研下,给我的对接文档里有相关方法的说明,照着对接即可.但在真正对接过程中还是踩过不少坑,这儿对之前的对接工作做个记录. 按照习惯先来一个效果 ...

  7. Qt开发技术:Qt富文本(一)富文本介绍、文档结构

    若该文为原创文章,未经允许不得转载 原博主博客地址:https://blog.csdn.net/qq21497936 原博主博客导航:https://blog.csdn.net/qq21497936/ ...

  8. wps如何在目录里面打省略号_在wps中怎么让文档目录的省略号对齐 - 卡饭网

    怎么在WPS中快速统计文档字数? 怎么在WPS中快速统计文档字数? 相信很多小伙伴在日常办公中都有用到WPS,在其中如何才能统计文档字数呢?方法很简单,下面小编就来为大家介绍.具体如下:1. 首先,打 ...

  9. 手机wps怎么编辑html,手机版WPS怎么编辑word文档?-手机版WPS编辑word文档的图文教程 - 河东软件园...

    手机版WPS怎么编辑word文档?相信上班或者上学的朋友对office办公软件都还是挺熟悉的,因为几乎每天都会进行一些基本的文档编辑.或者添加编号.图片等等操作:但是想必用得最多的就是电脑上的一些操作 ...

最新文章

  1. 如何检查linux系统的负载高低
  2. 百度人脸搜索的一次尝试(JAVA)
  3. 【转】你应该了解的基础和2017测试行业的趋势
  4. Zabbix3.X-Zabbix _Agent主动模式的监控(Active)
  5. [NOIP2015] 子串
  6. 奇怪吸引子---Aizawa
  7. web.xml 基本配置
  8. flash传值给javascript,并在html页面输出,javascript向flash swf文件传递参数值注意细节...
  9. SpringMVC的拦截器(Interceptor)和过滤器(Filter)的区别与联系
  10. word每行的末尾箭头怎么去掉_如何将word中箭头去掉 word中的箭头怎么去掉
  11. 关于PCB与设备外壳接地问题
  12. win7系统中如何使文件显示出扩展名
  13. 最小二乘法平面方程拟合计算, 点云法向量估算
  14. 福到了 分数 15作者 陈越单位 浙江大学
  15. 小米路由器3 mysql_小米路由器3 opkg安装
  16. php-win.exe 是什么,windows桌面指的是什么
  17. 1-5、PS基础操作
  18. 蔡学镛[散文随笔]:从A到E+
  19. SpringMVC之CRUD和文件上传下载
  20. 1.1 LaTex中文环境搭建

热门文章

  1. 欢迎来到JIT的世界: The Joy of Simple JITs
  2. android虚线边框_Android通过代码实现虚线或者虚线框shape
  3. 基于MATLAB的车牌识别系统研究
  4. android连接蓝牙耳机,蓝牙耳机厂家:Android蓝牙连接的一些心得
  5. Z05 - 034、访客分析 - 每日新访客
  6. 电源管理芯片的架构与功率
  7. html div背景自动居中显示,网站背景图居中自适应以及拉伸填充CSS代码解决方法...
  8. QNAP 威联通磁盘分区探索与数据导出
  9. 计算机系统管理及控制程序,计算机管理系统控制程序
  10. 最新elasticsearch7(二、批量插入存在即更新java)