• 使用Qt实现MDI风格的主窗体


    文章来源:http://hi.baidu.com/wuyunju/item/3d20164c99a276f6dc0f6c52

    QT提供了MDIArea控件可以很方便的实现标准的MDI窗体,但用起来并不方便.感觉像360浏览器一样通过页签来切换子窗体的方式比较好.点击菜单项或工具栏上的按钮创建新的页签,并生成一个子窗体.点击页签上的叉号关闭页签并释放子窗体对象.为了实现这种风格的MDI,可以借助QT的TabWidget控件,设置其tabsClosable属性为true,即可在页签上显示叉号.点击页签上的叉号时出发tabWidget控件的tabCloseRequested(int)信号,我们只需要定义一个响应的槽来处理关闭页签的信号即可. 

    #include "qtmdi.h"

    QTMdi::QTMdi(QWidget *parent, Qt::WFlags flags)
     : QMainWindow(parent, flags)
    {
      ui.setupUi(this);
      delete ui.tab;  //删除tabWidget上默认带有的两个页签
      delete ui.tab_2;
      connect(ui.actionChild1, SIGNAL(triggered(bool)), this, SLOT(action1Triggered(bool)));//关联菜单的action触发信号的槽,创建新的子窗体
      connect(ui.actionChild2, SIGNAL(triggered(bool)), this, SLOT(action2Triggered(bool)));
      connect(ui.tabWidget, SIGNAL(tabCloseRequested(int)), this, SLOT(tabCloseRequested(int)));//点击页签上的叉号触发
    }

    QTMdi::~QTMdi()
    {

    }

    void QTMdi::tabCloseRequested(int index)
    {
     QString tabCaption = ui.tabWidget->tabText(index);
     if(QMessageBox::question(this, tr("Message"), tr("是否要关闭页签:") + tabCaption, QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes)
       delete ui.tabWidget->widget(index);//关闭页签并释放掉对应的widget控件对象
    }

    void QTMdi::action1Triggered(bool checked)
    {
     for(int i = 0; i < ui.tabWidget->count(); i++)//首先根据要在页签上显示的字符串查找释放已经创建了,如果已创建则将这个页签激活(显示)
      if(ui.tabWidget->tabText(i) == tr("Child1"))
      {
       ui.tabWidget->setCurrentIndex(i);
       return;
      }
     child1 *c1 = new child1(this);//没有找到则创建一个并加入到tabWidget
     ui.tabWidget->addTab(c1, tr("Child1"));
     c1->showMaximized();
    }

    void QTMdi::action2Triggered(bool checked)
    {
     for(int i = 0; i < ui.tabWidget->count(); i++)
     if(ui.tabWidget->tabText(i) == tr("Child2"))
     {
      ui.tabWidget->setCurrentIndex(i);
      return;
     }
     child2 *c2 = new child2(this);
     ui.tabWidget->addTab(c2, tr("Child2"));
     c2->showMaximized();
    }

    http://blog.csdn.net/libaineu2004/article/details/19621569

  • 相关阅读:
    Java理论-Java高级
    Java理论-Java基础
    Java理论-JVM
    Nginx的使用总结
    修改tomcat端口号
    测试目录
    常用的设计模式汇总,超详细!
    Java高级程序员(5年左右)面试的题目集
    集合类--最详细的面试宝典--看这篇就够用了(java 1.8)
    Java面试宝典(2020版)
  • 原文地址:https://www.cnblogs.com/findumars/p/5107582.html
Copyright © 2020-2023  润新知