Qt WPS(有源码)

项目源码地址:WPS完整源码

一.项目详情

该项目仿照WPS,实现了部分的功能,能够很方便对文本和HTML进行修改,并且有打印功能,可以很方便的生成PDF。

  • 应用界面
    在这里插入图片描述
  • 项目架构分析
    这个项目主要可分为两个部分,一个是主窗体类,一个是文本编辑窗口,主窗体的中心部件是MDI容器,可以很方便的实现内嵌部件(也就是文本编辑类)

二. 项目部分功能结束

1.打印功能

这个功能核心的不是对QPrintDialog的运用

void MainWindow::on_actionPrint_triggered()
{
    TextEdit*edit=activateWindow();
    if(!edit) return ;

    //QPrinter::HighResolution 将Printer的分辨率设置为正在使用的打印机的分辨率
    QPrinter printer(QPrinter::HighResolution);

    //QPrintDialog 提供了一个用于指定打印机配置的对话框
    QPrintDialog dialog(&printer,this);

    //启用打印选定内容选项
//    dialog.setOption(QAbstractPrintDialog::PrintSelection,true);
//    printer.setPrintRange(QPrinter::Selection);//设置打印范围,打印选定文本

    if(dialog.exec()==QPrintDialog::Accepted)
    {
        edit->print(&printer);
    }


}

-打印界面
在这里插入图片描述

  • 预览界面
    在这里插入图片描述

2.信号映射器实现

在窗口下可以排列出当前MDI所显示的窗口信息,并且通过映射可以选中指定的窗口作为活动窗口。这个功能的核心主要是对QActionGroup活动组和QSignalMapper信号映射器的使用。

//aboutToShow在菜单显示出来之前要发出的
    connect(ui->menu_W,&QMenu::aboutToShow,this,&MainWindow::addSubWindowAction);

    connect(mapper,SIGNAL(mapped(QWidget*)),this,SLOT(setActiveSubWindow(QWidget *)));
    
  1. 对窗口显示进行绑定,当点击窗口的时候,立即通过addSubWindowAction对窗口显示信息进行修改。

  2. mapper实现的功能是将窗口显示信息作为键,而窗口作为值,两者进行绑定。

void MainWindow::addSubWindowAction()
{
    QList<QAction*> actionList=actionGroup->actions();
    if(!actionList.isEmpty())//释放掉之前所有资源
    {
        for(QAction*action:actionList)
        {
            delete action;
        }
    }



    QList<QMdiSubWindow *> subWindowList = ui->mdiArea->subWindowList();//获取子窗体列表
   if(!subWindowList.isEmpty())
   {
       ui->menu_W->addSeparator();//添加分隔符
   }

   for(int i=0;i<subWindowList.count();i++)
   {
       QMdiSubWindow*subWindow = subWindowList[i];//获取子窗体
       TextEdit*edit=qobject_cast<TextEdit*>(subWindow->widget());//获取内嵌部件

       QString action_text=QString("%1 %2").arg(i+1).arg(edit->getDocWindowTitle());

       QAction*action = ui->menu_W->addAction(action_text);
       actionGroup->addAction(action);
       action->setCheckable(true);

       if(edit==activateWindow())
       {
           action->setChecked(true); //对应活动窗口设置为选中状态
       }

       //将action的triggered信号传递给信号映射器mapper,然后由mapper进行统一转发
       connect(action,SIGNAL(triggered(bool)),mapper,SLOT(map()));

       mapper->setMapping(action,subWindow);//添加映射,设置信号发送对象与要发送的对象
   }


}

void MainWindow::setActiveSubWindow(QWidget *widget)
{
    //父类指针可以指向子类
    if(widget) ui->mdiArea->setActiveSubWindow(qobject_cast<QMdiSubWindow*>(widget));


}

在这里插入图片描述

  • 17
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值