zoukankan      html  css  js  c++  java
  • 使用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();
    }

  • 相关阅读:
    侧滑的一个注意
    viewpager+fragment结合
    webview
    动画
    <context:annotation-config> 和 <context:component-scan>的区别
    spring mvc 原理及应用
    HDU
    使用Log4Net将系统日志信息记录到记事本和数据库中
    chromium for android GPU进程结构分析
    【云图】怎样制作全国KTV查询系统?
  • 原文地址:https://www.cnblogs.com/findumars/p/4886280.html
Copyright © 2011-2022 走看看