Qt实现MDI应用程序

本文记录Qt实现MDI应用程序的相关操作实现

目录

1.MDM模式下窗口的显示两种模式

1.1TabbedView 页签化显示

1.2 SubWindowView 子窗体显示

堆叠cascadeSubWindows

平铺tileSubWindows

2.MDM模式实现记录

2.1. 窗体继承自QMainWindow

2.2.增加组件MdiArea

2.3.定义统一TFormDoc作为子窗体

2.4. MDI父窗体上定义action,点击时 转换为TFormDoc窗体,进行对应方法的处理

2.5 将子窗体中的文本框编辑信号,绑定到窗体的QWidget 的公有槽函数 setWindowModified(bool),会修改 windowModified 属性的值。

2.6. 子窗体激活事件

2.7. MDI模式切换


1.MDM模式下窗口的显示两种模式

1.1TabbedView 页签化显示

1.2 SubWindowView 子窗体显示

两种样式 堆叠和平铺

堆叠cascadeSubWindows

平铺tileSubWindows

2.MDM模式实现记录

2.1. 窗体继承自QMainWindow

void MdiMainWindow::closeEvent(QCloseEvent *event)
{
    ui->mdiArea->closeAllSubWindows();
    event->accept();
}

MdiMainWindow::MdiMainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MdiMainWindow)
{
    ui->setupUi(this);

    setCentralWidget(ui->mdiArea);
    setWindowState(Qt::WindowMaximized);
}

2.2.增加组件MdiArea

2.3.定义统一TFormDoc作为子窗体

2.4. MDI父窗体上定义action,点击时 转换为TFormDoc窗体,进行对应方法的处理

void MdiMainWindow::on_actPaste_triggered()
{
    TFormDoc *form  = (TFormDoc*)ui->mdiArea->activeSubWindow()->widget();
    form->textPaste();
}

2.5 将子窗体中的文本框编辑信号,绑定到窗体的QWidget 的公有槽函数 setWindowModified(bool),会修改 windowModified 属性的值。

 connect(ui->plainTextEdit,&QPlainTextEdit::modificationChanged,this,&QWidget::setWindowModified);

2.6. 子窗体激活事件

激活的时候,在statusBar上显示一下信息

void MdiMainWindow::on_mdiArea_subWindowActivated(QMdiSubWindow *arg1)
{
    Q_UNUSED(arg1);
    if(ui->mdiArea->subWindowList().size()==0)
    {
        ui->actCut->setEnabled(false);
        ui->actCopy->setEnabled(false);
        ui->actPaste->setEnabled(false);
        ui->actFont->setEnabled(false);
        ui->statusbar->clearMessage();
    }
    else
    {
        TFormDoc *form  = static_cast<TFormDoc*>(ui->mdiArea->activeSubWindow()->widget());
        ui->statusbar->showMessage(form->currentFileName());
    }
}

2.7. MDI模式切换

void MdiMainWindow::on_actViewMode_triggered(bool checked)
{
    if(checked)//多页显示模式
          ui->mdiArea->setViewMode(QMdiArea::TabbedView);
    else
        ui->mdiArea->setViewMode(QMdiArea::SubWindowView);
    ui->mdiArea->setTabsClosable(checked);
    ui->actCascade->setEnabled(!checked);
    ui->actTile->setEnabled(!checked);
}

相关推荐

  1. Qt设置应用程序字体

    2024-07-16 07:26:06       56 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-16 07:26:06       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-16 07:26:06       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-16 07:26:06       58 阅读
  4. Python语言-面向对象

    2024-07-16 07:26:06       69 阅读

热门阅读

  1. PyCharm & 机器学习:打造高效数据可视化工作流

    2024-07-16 07:26:06       30 阅读
  2. 算法工程师热门面试问题一

    2024-07-16 07:26:06       20 阅读
  3. Android Studio Download Gradle 时慢问题解决

    2024-07-16 07:26:06       25 阅读
  4. 网络安全-网络安全及其防护措施3

    2024-07-16 07:26:06       30 阅读
  5. 安全加固:Eureka服务实例安全组配置全攻略

    2024-07-16 07:26:06       26 阅读
  6. Vue+Electron打包桌面应用(从零到一完整教程)

    2024-07-16 07:26:06       34 阅读
  7. Web3发展的基本要素

    2024-07-16 07:26:06       30 阅读
  8. 自研electron31+vue3+elementPlus桌面聊天Exe应用-源码版

    2024-07-16 07:26:06       22 阅读
  9. 2024最新超详细SpringMvc常用注解总结

    2024-07-16 07:26:06       25 阅读
  10. 编织微服务网络:在Eureka中打造分布式服务网格

    2024-07-16 07:26:06       26 阅读