#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
QT5开发及实例(源码).zip
4星 · 超过85%的资源 需积分: 50 129 浏览量
2014-03-24
00:07:17
上传
评论 4
收藏 826KB ZIP 举报
无良老鬼
- 粉丝: 0
- 资源: 4
最新资源
- HCIP-Datacom笔记 (1).pdf
- yolov5,SSD 可能使用到的一些代码
- bbbbbbbbbbbbbbbbbb
- 安卓逆向学习笔记之Frida Stalker 还原OLLVM AES.docx
- 安卓逆向学习笔记之unicorn来trace还原OLLVM Base64.docx
- 最新版本私钥助记词碰撞器大富豪使用python进行制作通过接口的方式进行验证支持多币种多链多网络一分钟万次验证高出货率
- 介绍离散性制造行业的MES系统流程
- Arduino IDE压缩包版本,2024年4月26日,最新版本
- 基于IDEA-CCNL/Randeng-Pegasus-238M-Summary-Chines微调的中文文本摘要任务源码+数据集
- 自动驾驶-状态估计和定位之直方图滤波(Histogram+Filter)定位应用和源码.pdf
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
前往页