01WPS部分编写实现QT

devtools/2024/9/23 14:04:42/

1、新建项目

-创建wps类
-继承QMainWindow

2、菜单栏设置

在这里插入图片描述

3、开始实现操作

在这里插入图片描述
设置程序图标:

pro文件中添加 RC_ICONS += images/wps.ico  //后面这个是文件地址哈

1、字体选择大小设置
在这里插入图片描述

 
void MainWindow::initMainWindow()
{// 初始化字号列表项QFontDatabase fontdb; // 创建 QFontDatabase 对象,用于管理字体信息foreach(int fontsize, fontdb.standardSizes()) // 遍历标准字号列表{// 将当前字号添加到字号下拉框中ui->sizeComboBox->addItem(QString::number(fontsize));QFont defFont; // 定义 QFont 对象,用于获取当前默认的字体信息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);}}

2、子类ChildWmd设置

头文件:
#ifndef CHILDWND_H
#define CHILDWND_H#include <QTextEdit>
#include <QObject>class ChildWnd : public QTextEdit
{Q_OBJECT
public:ChildWnd();QString m_CurDocPath; //当前文档路径void newDoc(); //新建文档QString getCurDocName();//文档路径中提取文档名private slots:void docBeModified(); //文件修改时候,加*
private:bool m_bSaved; //文档是否保存};#endif // CHILDWND_H实现文件:
#include "childwnd.h"
#include<QFileDialog>
#pragma execution_character_set("utf-8");
ChildWnd::ChildWnd()
{setAttribute(Qt::WA_DeleteOnClose); //子窗口关闭销毁该类的实例对象m_bSaved = false;
}void ChildWnd::newDoc()
{static int wndSeqNum = 1;m_CurDocPath = QString("WPS 文档 %1").arg(wndSeqNum++);//设置窗体把标题,文档改动后加*setWindowTitle(m_CurDocPath+"[*]"+" - MyWPS");connect(document(),SIGNAL(contentsChanged()),this,SLOT(docBeModified()));}QString ChildWnd::getCurDocName()
{return QFileInfo(m_CurDocPath).fileName();}void ChildWnd::docBeModified()
{setWindowModified(document()->isModified()); //文档是否被修改}

效果展示:
在这里插入图片描述

window中的头文件:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include "childwnd.h"
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private:Ui::MainWindow *ui;public:void initMainWindow();void docNew();private slots:
//    void on_newAction_triggered();void on_newAction_triggered();void refreshMenus();private:void formatEnabled();ChildWnd *activateChildWnd();};
#endif // MAINWINDOW_H
window中的实现代码:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include"childwnd.h"
#include<QMdiSubWindow>
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);initMainWindow();
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::initMainWindow()
{// 初始化字号列表项QFontDatabase fontdb; // 创建 QFontDatabase 对象,用于管理字体信息foreach(int fontsize, fontdb.standardSizes()) // 遍历标准字号列表{// 将当前字号添加到字号下拉框中ui->sizeComboBox->addItem(QString::number(fontsize));QFont defFont; // 定义 QFont 对象,用于获取当前默认的字体信息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);}}void MainWindow::docNew()
{// 创建新的子窗口对象ChildWnd *childwnd = new ChildWnd;// 将子窗口添加到 MDI 区域中ui->mdiArea->addSubWindow(childwnd);// 当子窗口中有文本选择时,使剪切和复制操作项可用connect(childwnd, SIGNAL(copyAvailable(bool)), ui->cutAction, SLOT(setEnabled(bool)));connect(childwnd, SIGNAL(copyAvailable(bool)), ui->copyAction, SLOT(setEnabled(bool)));// 调用子窗口的 newDoc 函数,初始化新的文档childwnd->newDoc();// 显示子窗口childwnd->show();// 根据当前格式设置,更新菜单栏中的相关操作项的可用状态formatEnabled();
}void MainWindow::formatEnabled()
{ui->boldAction->setEnabled(true);ui->italicAction->setEnabled(true);ui->underlineAction->setEnabled(true);ui->leftAlignAction->setEnabled(true);ui->centerAlignAction->setEnabled(true);ui->rightAlignAction->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;
}void MainWindow::on_newAction_triggered()
{docNew();
}void MainWindow::refreshMenus() //设置选择状态可有的操作
{bool hasChild = false;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->centerAlignAction->setEnabled(hasSelect);ui->rightAlignAction->setEnabled(hasSelect);ui->justifyAction->setEnabled(hasSelect);ui->colorAction->setEnabled(hasSelect);}

效果展示:
在这里插入图片描述


http://www.ppmy.cn/devtools/40755.html

相关文章

详解AI算法作画原理

AI作画算法的原理主要基于深度学习和计算机视觉技术&#xff0c;特别是生成对抗网络&#xff08;GANs&#xff09;和卷积神经网络&#xff08;CNNs&#xff09;等模型。以下是AI作画算法原理的详细解释&#xff1a; 数据收集与处理&#xff1a; AI作画的第一步是收集大量的艺术…

【送书福利第七期】你好!Java(文末送书)

文章目录 编辑推荐内容简介作者简介目录前言/序言 编辑推荐 适读人群 &#xff1a;程序员;相关院校师生 本书以轻松幽默的语言&#xff0c;从零开始介绍Java语言。书名来源于编程语言中最经典的Hello World程序&#xff0c;寓意带读者从入门到精通。 书中每章都设有总结与扩展…

QT设计模式:代理模式

基本概念 代理模式&#xff08;Proxy Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许你提供一个代理对象&#xff0c;以控制对其他对象的访问。 代理通常在客户端和实际对象之间充当中介&#xff0c;用于控制对实际对象的访问&#xff08;如登录控制&#xff09;…

vue的计算属性

Vue的计算属性&#xff08;Computed Properties&#xff09;是一种更加强大的数据绑定方式&#xff0c;它允许你定义依赖于其他数据属性的计算属性。计算属性是基于它们的依赖进行缓存的&#xff0c;只有相关依赖发生改变时才会重新求值。这意味着只要计算属性依赖的响应式属性…

Spring Framework-IoC详解

IoC的概念和作用 在介绍Ioc之前&#xff0c;我们首先先了解一下以下内容 什么是程序的耦合 耦合性(Coupling)&#xff0c;也叫耦合度&#xff0c;是对模块间关联程度的度量。耦合的强弱取决于模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。模块间的耦合度…

牛客热题:链表相加(二)

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;力扣刷题日记 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 文章目录 牛客热题&#xff1a;链表相加(二)题目链接方法一&am…

1900年-2100年公历转农历数据

数据 农历数据 0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, //1900-1909 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, //1910-1919 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, …

CSS拟物按钮

<div class"btn">F</div>.btn {margin: 150px 0 0 150px;display: flex;justify-content: center;align-items: center;width: 100px;height: 100px;background-color: #fff;border-radius: 20px;font-size: 50px;color: #333;/* 禁止选中文本 */user-se…