#include "myword.h"
#include <QtWidgets>
#include "mychild.h"
const QString rsrcPath = ":/images";
MyWord::MyWord(QWidget *parent)
: QMainWindow(parent)
{
mdiArea = new QMdiArea;
mdiArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
mdiArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
setCentralWidget(mdiArea);
connect(mdiArea, SIGNAL(subWindowActivated(QMdiSubWindow*)),this, SLOT(updateMenus()));
windowMapper = new QSignalMapper(this);
connect(windowMapper, SIGNAL(mapped(QWidget*)),this, SLOT(setActiveSubWindow(QWidget*)));
createActions();
createMenus();
createToolBars();
createStatusBar();
updateMenus();
move(200,150);
resize(800,500);
setWindowTitle(tr("Myself Word"));
setUnifiedTitleAndToolBarOnMac(true);
}
MyWord::~MyWord()
{
}
void MyWord::closeEvent(QCloseEvent *event)
{
mdiArea->closeAllSubWindows();
if (mdiArea->currentSubWindow()) {
event->ignore();
} else {
event->accept();
}
}
void MyWord::updateMenus()
{
//至少有一个子文档打开着的情况
bool hasMyChild = (activeMyChild()!=0);
saveAct->setEnabled(hasMyChild);
saveAsAct->setEnabled(hasMyChild);
printAct->setEnabled(hasMyChild);
printPreviewAct->setEnabled(hasMyChild);
pasteAct->setEnabled(hasMyChild);
closeAct->setEnabled(hasMyChild);
closeAllAct->setEnabled(hasMyChild);
tileAct->setEnabled(hasMyChild);
cascadeAct->setEnabled(hasMyChild);
nextAct->setEnabled(hasMyChild);
previousAct->setEnabled(hasMyChild);
separatorAct->setVisible(hasMyChild);
//文档打开着并且其中有内容被选中的情况
bool hasSelection = (activeMyChild() && activeMyChild()->textCursor().hasSelection());
cutAct->setEnabled(hasSelection);
copyAct->setEnabled(hasSelection);
boldAct->setEnabled(hasSelection);
italicAct->setEnabled(hasSelection);
underlineAct->setEnabled(hasSelection);
leftAlignAct->setEnabled(hasSelection);
centerAct->setEnabled(hasSelection);
rightAlignAct->setEnabled(hasSelection);
justifyAct->setEnabled(hasSelection);
colorAct->setEnabled(hasSelection);
}
void MyWord::updateWindowMenu()
{
windowMenu->clear();
windowMenu->addAction(closeAct);
windowMenu->addAction(closeAllAct);
windowMenu->addSeparator();
windowMenu->addAction(tileAct);
windowMenu->addAction(cascadeAct);
windowMenu->addSeparator();
windowMenu->addAction(nextAct);
windowMenu->addAction(previousAct);
windowMenu->addAction(separatorAct);
QList<QMdiSubWindow *> windows = mdiArea->subWindowList();
separatorAct->setVisible(!windows.isEmpty());
//显示当前打开着的文档子窗口项
for (int i = 0; i < windows.size(); ++i) {
MyChild *child = qobject_cast<MyChild *>(windows.at(i)->widget());
QString text;
if (i < 9) {
text = tr("&%1 %2").arg(i + 1).arg(child->userFriendlyCurrentFile());
} else {
text = tr("%1 %2").arg(i + 1).arg(child->userFriendlyCurrentFile());
}
QAction *action = windowMenu->addAction(text);
action->setCheckable(true);
action ->setChecked(child == activeMyChild());
connect(action, SIGNAL(triggered()), windowMapper, SLOT(map()));
windowMapper->setMapping(action, windows.at(i));
}
enabledText(); //使得字体设置菜单可用
}
MyChild *MyWord::createMyChild()
{
MyChild *child = new MyChild;
mdiArea->addSubWindow(child);
connect(child, SIGNAL(copyAvailable(bool)),cutAct, SLOT(setEnabled(bool)));
connect(child, SIGNAL(copyAvailable(bool)),copyAct, SLOT(setEnabled(bool)));
return child;
}
void MyWord::createActions()
{
/*【文件】菜单动作集*/
newAct = new QAction(QIcon(rsrcPath + "/filenew.png"), tr("新建(&N)"), this);
newAct->setShortcuts(QKeySequence::New);
newAct->setToolTip("新建"); //设置工具栏按钮的提示文本
newAct->setStatusTip(tr("创建一个新文档")); //设置状态栏提示文本
connect(newAct, SIGNAL(triggered()), this, SLOT(fileNew()));
openAct = new QAction(QIcon(rsrcPath + "/fileopen.png"), tr("打开(&O)..."), this);
openAct->setShortcuts(QKeySequence::Open);
openAct->setToolTip("打开");
openAct->setStatusTip(tr("打开已存在的文档"));
connect(openAct, SIGNAL(triggered()), this, SLOT(fileOpen()));
saveAct = new QAction(QIcon(rsrcPath + "/filesave.png"), tr("保存(&S)"), this);
saveAct->setShortcuts(QKeySequence::Save);
saveAct->setToolTip("保存");
saveAct->setStatusTip(tr("将当前文档存盘"));
connect(saveAct, SIGNAL(triggered()), this, SLOT(fileSave()));
saveAsAct = new QAction(tr("另存为(&A)..."), this);
saveAsAct->setShortcuts(QKeySequence::SaveAs);
saveAsAct->setStatusTip(tr("以一个新名字保存文档"));
connect(saveAsAct, SIGNAL(triggered()), this, SLOT(fileSaveAs()));
printAct = new QAction(QIcon(rsrcPath + "/fileprint.png"), tr("打印(&P)..."), this);
printAct->setShortcuts(QKeySequence::Print);
printAct->setToolTip("打印");
printAct->setStatusTip(tr("打印文档"));
connect(printAct, SIGNAL(triggered()), this, SLOT(filePrint()));
printPreviewAct = new QAction(tr("打印预览..."), this);
printPreviewAct->setStatusTip(tr("预览打印效果"));
connect(printPreviewAct, SIGNAL(triggered()), this, SLOT(filePrintPreview()));
exitAct = new QAction(tr("退出(&X)"), this);
exitAct->setShortcuts(QKeySequence::Quit);
exitAct->setStatusTip(tr("退出应用程序"));
connect(exitAct, SIGNAL(triggered()), qApp, SLOT(closeAllWindows())); //不用自己实现
/*【编辑】菜单动作集*/
undoAct = new QAction(QIcon(rsrcPath + "/editundo.png"),tr("撤销(&U)"), this);
undoAct->setShortcut(QKeySequence::Undo);
undoAct->setToolTip("撤销");
undoAct->setStatusTip(tr("撤销当前操作"));
connect(undoAct, SIGNAL(triggered()), this, SLOT(undo())); //不用子窗口类去实现
redoAct = new QAction(QIcon(rsrcPath + "/editredo.png"),tr("重做(&R)"), this);
redoAct->setShortcut(QKeySequence::Redo);
redoAct->setToolTip("重做");
redoAct->setStatusTip(tr("恢复之前操作"));
connect(redoAct, SIGNAL(triggered()), this, SLOT(redo())); //不用子窗口类去实现
cutAct = new QAction(QIcon(rsrcPath + "/editcut.png"),tr("剪切(&T)"), this);
cutAct->setShortcuts(QKeySequence::Cut);
cutAct->setToolTip("剪切");
cutAct->setStatusTip(tr("从文档中裁剪所选内容,并将其放入剪贴板"));
connect(cutAct, SIGNAL(triggered()), this, SLOT(cut())); //不用子窗口类去实现
copyAct = new QAction(QIcon(rsrcPath + "/editcopy.png"),tr("复制(&C)"), this);
copyAct->setShortcuts(QKeySequence::Copy);
copyAct->setToolTip("复制");
copyAct->setStatusTip(tr("拷贝所选内容,并将其放入剪贴板"));
connect(copyAct, SIGNAL(triggered()), this, SLOT(copy())); //不用子窗口类去实现
pasteAct = new QAction(QIcon(rsrcPath + "/editpaste.png"),tr("粘贴(&P)"), this);
pasteAct->setShortcuts(QKeySequence::Paste);
pasteAct->setToolTip("粘贴");
pasteAct->setStatusTip(tr("将剪贴板的内容粘贴到文档"));
connect(pasteAct, SIGNAL(triggered()), this, SLOT(paste())); //不用子窗口类去实现
/*【格式】菜单动作集*/
boldAct = new QAction(QIcon(rsrcPath + "/textbold.png"),tr("加粗(&B)"), this);
boldAct->setCheckable(true);
boldAct->setShortcut(Qt::CTRL + Qt::Key_B);
boldAct->setToolTip("加粗");
boldAct->setStatusTip(tr("将所选文字加粗"));
QFont
QT版开发word文档处理软件(完整源码)
3星 · 超过75%的资源 需积分: 45 125 浏览量
2015-11-19
11:44:43
上传
评论 13
收藏 41KB ZIP 举报
yangwensheng123
- 粉丝: 1
- 资源: 3
最新资源
- XILINXFPGA源码Xilinxspratan3xcs100E(VGAPS2)
- XILINXFPGA源码XilinxSPARTAN-3E入门开发板实例
- XILINXFPGA源码XilinxSdramVerilog和VHDL版本文档
- 物联网智能家居方案-基于Nucleo-STM32L073&机智云(大赛作品,文档齐全,可直接运行)(文档加Matlab源码)
- XILINXFPGA源码XilinxISE9.xFPGACPLD设计源码
- 成都市地图含高新区(高新南区,高新西区),天府新区,东部新区虚拟行政区划
- XILINXFPGA源码XilinxEDK设计试验
- XILINXFPGA源码XilinxEDKMicroBlaze内置USB固件程序
- 基于 django 的视频点播后台管理系统源代码+数据库
- 基于Java的网上医院预约挂号系统的设计与实现(部署视频)-kaic.mp4
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
前往页