96SEO 2026-02-19 21:24 17
*separatorAct;////【帮助】主菜单QAction

Area是Qt中用于创建多文档界面的组件。
它提供了一种在单个窗口中管理多个文档的方式每个文档通常是一个子窗口QMdiSubWindow。
该组件主要用于设计多文档界面应用程序具备有多种窗体展示风格实现了在父窗体中内嵌多种子窗体的功能使开发者能够轻松地创建支持多个文档的应用程序。
就像你可以在桌面上打开好几个浏览器文档等等页面一样而不是每次只能打开一个。
首先我们需要创建一个QMdiArea组件用来显示我们创建的word文档。
接着我们把QMdiArea组件设置为中心窗口毕竟要在这个上面显示文档。
srcpaths:/images;MyWord::MyWord(QWidget
QMdiArea;mdiArea-setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);mdiArea-setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);setCentralWidget(mdiArea);connect(mdiArea,SIGNAL(subWindowActivated(QMdiSubWindow*)),this,SLOT(updateMenus()));windowMappernew
QSignalMapper(this);//映射器重新发送信号根据信号设置活动窗口connect(windowMapper,SIGNAL(mapped(QWidget*)),this,SLOT(setActiveSubWindow(QWidget*)));//创建createActions();resize(800,600);setWindowTitle(tr(Office办公自动化文字编辑
V2.1));setUnifiedTitleAndToolBarOnMac(true);
上面的srcpaths是定义的图片文件夹路径我们使用各种图标时只需要在加上图片名称即可。
Qt应用程序的主窗口管理着中心窗口部件它会在合适的时候销毁这个中心窗口部件。
每次程序调用setCentralWidget()方法时先前存在的中心窗口部件将被新的所替换而且主窗口会销毁原来的部件无需用户处理。
QMdiArea的subWindowActivated在一个窗口激活获得焦点时发射语法如下
subWindowActivated(QMdiSubWindow
如果window参数为None则表示没有激活的子窗口如果应用没有disable子窗口则表示所有子窗口都关闭了。
这个信号比较有用当开发的应用需要结合子窗口的个数来显示不同的状态时可以通过这个信号判断window参数是否为None来设置不同的状态。
在Qt框架中QSignalMapper类用于简化信号与槽机制的处理。
它可以将一个信号连接到多个槽同时为每个槽提供一个标识符以便在槽函数中区分不同的信号来源。
简单来说一个典型的使用场合是大量控件都要相应槽函数而这些槽函数的实现又大致相同。
这种情况下最直接的办法就是仍然为每一个控件的相应信号创建一个槽函数。
但这会导致代码的大量重复。
此时我们就可以使用QSignalMapper来实现这种需求。
2、使用可浮动停靠或可移动的工具栏可能会导致绘制错误因此不建议使用。
可通过unifiedTitleAndToolBarOnMac()
、setUnifiedTitleAndToolBarOnMacbool来查询或设置该属性。
然后我们就要开始创建那些个菜单动作并且加上图标。
这将会是一个很长很长很重复的代码
QAction(QIcon(srcpaths/filenew.png),tr(新建(N)),this);newAct-setShortcuts(QKeySequence::New);newAct-setToolTip(新建);//工具栏按钮的提示文本信息newAct-setStatusTip(tr(创建一个新的word文档));//这只状态栏
提示文本信息connect(newAct,SIGNAL(triggered()),this,SLOT(fileNew()));
QAction(QIcon(srcpaths/fileopen.png),tr(打开(O)),this);openAct-setShortcuts(QKeySequence::Open);openAct-setToolTip(打开);openAct-setStatusTip(tr(打开一个word文档));connect(openAct,SIGNAL(triggered()),this,SLOT(fileOpen()));
QAction(QIcon(srcpaths/filesave.png),tr(保存(S)),this);saveAct-setShortcuts(QKeySequence::Save);saveAct-setToolTip(保存);saveAct-setStatusTip(tr(保存此word文档));connect(saveAct,SIGNAL(triggered()),this,SLOT(fileSave()));
QAction(tr(另存为(A)),this);saveAsAct-setShortcut(QKeySequence::SaveAs);saveAsAct-setToolTip(另存为);saveAsAct-setStatusTip(tr(另存为此word文档到...));connect(saveAsAct,SIGNAL(triggered()),this,SLOT(fileSaveAs()));
QAction(QIcon(srcpaths/fileprint.png),tr(打印(P)),this);printAct-setShortcuts(QKeySequence::Print);printAct-setToolTip(保存);printAct-setStatusTip(tr(打印此word文档...));connect(printAct,SIGNAL(triggered()),this,SLOT(printPrint()));
QAction(tr(打印预览),this);printPreviewAct-setStatusTip(tr(打印前预览此word文档));connect(printPreviewAct,SIGNAL(triggered()),this,SLOT(filePrintfPreview()));//退出exitActnew
QAction(tr(退出),this);exitAct-setShortcut(QKeySequence::Quit);exitAct-setToolTip(退出);exitAct-setStatusTip(tr(退出此word文档));connect(exitAct,SIGNAL(triggered()),this,SLOT(closeAllWindows()));
QAction(QIcon(srcpaths/editundo.png),tr(撤销(U)),this);undoAct-setShortcuts(QKeySequence::Undo);undoAct-setToolTip(撤销);undoAct-setStatusTip(tr(撤销当前Word文档操作.));connect(undoAct,SIGNAL(triggered()),this,SLOT(undo()));//
QAction(QIcon(srcpaths/editredo.png),tr(重做(R)),this);redoAct-setShortcuts(QKeySequence::Redo);redoAct-setToolTip(重做);redoAct-setStatusTip(tr(恢复之前的Word文档操作.));connect(redoAct,SIGNAL(triggered()),this,SLOT(redo()));//
QAction(QIcon(srcpaths/editcut.png),tr(剪切(T)),this);cutAct-setShortcuts(QKeySequence::Cut);cutAct-setToolTip(剪切);cutAct-setStatusTip(tr(从Word文档中裁剪所选择的倥将它存放到剪贴板.));connect(cutAct,SIGNAL(triggered()),this,SLOT(cut()));//
QAction(QIcon(srcpaths/editcopy.png),tr(复制(C)),this);copyAct-setShortcuts(QKeySequence::Copy);copyAct-setToolTip(复制);copyAct-setStatusTip(tr(复制当前所选中的内容将它存放到剪贴板.));connect(copyAct,SIGNAL(triggered()),this,SLOT(copy()));//
QAction(QIcon(srcpaths/editpaste.png),tr(粘贴(P)),this);pasteAct-setShortcuts(QKeySequence::Paste);pasteAct-setToolTip(粘贴);pasteAct-setStatusTip(tr(将剪贴板里面的内容粘贴到当前word文档.));connect(pasteAct,SIGNAL(triggered()),this,SLOT(paste()));
QAction(QIcon(srcpaths/textbold.png),tr(加粗(B)),this);boldAct-setCheckable(true);boldAct-setShortcut(Qt::CTRL
Qt::Key_B);boldAct-setToolTip(加粗);boldAct-setStatusTip(tr(将你所选择的文字进行加粗处理.));QFont
bold;bold.setBold(true);boldAct-setFont(bold);connect(boldAct,SIGNAL(triggered()),this,SLOT(textBold()));//
QAction(QIcon(srcpaths/textitalic.png),tr(倾斜(I)),this);italicAct-setCheckable(true);italicAct-setShortcut(Qt::CTRL
Qt::Key_I);italicAct-setToolTip(倾斜);italicAct-setStatusTip(tr(将你所选择的文字进行倾斜处理.));QFont
italic;italic.setItalic(true);italicAct-setFont(italic);connect(italicAct,SIGNAL(triggered()),this,SLOT(textIalic()));//
QAction(QIcon(srcpaths/textunder.png),tr(下划线(U)),this);underlineAct-setCheckable(true);underlineAct-setShortcut(Qt::CTRL
Qt::Key_U);underlineAct-setToolTip(下划线);underlineAct-setStatusTip(tr(将你所选择的文字添加下划线.));QFont
underline;underline.setUnderline(true);underlineAct-setFont(underline);connect(underlineAct,SIGNAL(triggered()),this,SLOT(textUnderline()));
对于这个字体操作我们都要新建QFont类然后再把所需要的动作变成true最后在连接到所需要实现的槽函数里。
【格式】--段落子菜单下各项为同一个菜单项组我们只能选中其中的一项
QActionGroup(this);connect(grp,SIGNAL(triggered(QAction*)),this,SLOT(textAlign(QAction*)));if(QApplication::isLeftToRight()){leftAlignActnew
QAction(QIcon(srcpaths/textleft.png),tr(左对齐(L)),grp);centerActnew
QAction(QIcon(srcpaths/textcenter.png),tr(居中对齐(E)),grp);rightAlignActnew
QAction(QIcon(srcpaths/textright.png),tr(右对齐(R)),grp);}else{rightAlignActnew
QAction(QIcon(srcpaths/textright.png),tr(右对齐(R)),grp);centerActnew
QAction(QIcon(srcpaths/textcenter.png),tr(居中对齐(E)),grp);leftAlignActnew
QAction(QIcon(srcpaths/textleft.png),tr(左对齐(L)),grp);}justifyActnew
QAction(QIcon(srcpathstextkustify.png),tr(两端对齐),grp);leftAlignAct-setShortcut(Qt::CTRLQt::Key_L);leftAlignAct-setCheckable(true);leftAlignAct-setToolTip(左对齐);leftAlignAct-setStatusTip(tr(将选择文字进行左对齐.));centerAct-setShortcut(Qt::CTRLQt::Key_E);centerAct-setCheckable(true);centerAct-setToolTip(居中对齐);centerAct-setStatusTip(tr(将选择文字进行居中对齐.));rightAlignAct-setShortcut(Qt::CTRLQt::Key_R);rightAlignAct-setCheckable(true);rightAlignAct-setToolTip(右对齐);rightAlignAct-setStatusTip(tr(将选择文字进行右对齐.));justifyAct-setShortcut(Qt::CTRLQt::Key_J);justifyAct-setCheckable(true);justifyAct-setToolTip(两端对齐);justifyAct-setStatusTip(tr(将选择文字进行两端对齐.));QPixmap
pix(16,16);pix.fill(Qt::red);colorActnew
QAction(pix,tr(颜色(C)...),this);colorAct-setToolTip(颜色);colorAct-setStatusTip(tr(将你选择的文字设置对应的颜色.));connect(colorAct,SIGNAL(triggered()),this,SLOT(textColor()));
对象的类。
它主要用于实现互斥选择即单选或多选即复选的行为特别是在菜单、工具栏或上下文菜单中当存在一系列相互排斥或相关联的操作选项时使用
这也是确保每次只有一个被选中总不能即左对齐又右对齐还得居中对齐不能既要又要还要。
QAction(tr(关闭(O)),this);closeAct-setStatusTip(tr(关闭活动word文档子窗口.));connect(closeAct,SIGNAL(triggered()),mdiArea,SLOT(closeActiveSubWindow()));closeAllActnew
QAction(tr(关闭所有(A)),this);closeAllAct-setStatusTip(tr(关闭活动word文档所有子窗口.));connect(closeAllAct,SIGNAL(triggered()),mdiArea,SLOT(closeAllSubWindows()));tileActnew
QAction(tr(平铺(T)),this);tileAct-setStatusTip(tr(平铺子窗口.));connect(tileAct,SIGNAL(triggered()),mdiArea,SLOT(tileSubWindows()));cascadeActnew
QAction(tr(层叠(C)),this);cascadeAct-setStatusTip(tr(层叠子窗口.));connect(cascadeAct,SIGNAL(triggered()),mdiArea,SLOT(cascadeSubWindows()));nextActnew
QAction(tr(下一个(T)),this);nextAct-setShortcuts(QKeySequence::NextChild);nextAct-setStatusTip(tr(移动焦点到下一个子窗口.));connect(nextAct,SIGNAL(triggered()),mdiArea,SLOT(activateNextSubWindow()));previousActnew
QAction(tr(前一个(V)),this);previousAct-setShortcuts(QKeySequence::PreviousChild);previousAct-setStatusTip(tr(移动焦点到前一个子窗口.));connect(previousAct,SIGNAL(triggered()),mdiArea,SLOT(activatePreviousSubWindow()));separatorActnew
QAction(this);separatorAct-setSeparator(true);
QAction(tr(关于(A)),this);aboutAct-setStatusTip(关于Office
Word相关信息.);connect(aboutAct,SIGNAL(triggered()),this,SLOT(about()));aboutQtActnew
Qt(Qt)),this);aboutQtAct-setStatusTip(关于
Qt库相关信息.);connect(aboutQtAct,SIGNAL(triggered()),this,SLOT(aboutQt()));
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback