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

摘要:
文章来源:http://hi.baidu.com/wuyunju/item/3d20164c99a276f6dc0f6c52QT提供了MDIArea控件可以很方便的实现标准的MDI窗体,但用起来并不方便.感觉像360浏览器一样通过页签来切换子窗体的方式比较好.点击菜单项或工具栏上的按钮创建新的页签,并生成一个子窗体.点击页签上的叉号关闭页签并释放子窗体对象.为了实现这种风格的MDI,可以借助QT的

文章来源: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::WFlagsflags)
:QMainWindow(parent,flags)
{
ui.setupUi(this);
deleteui.tab;//删除tabWidget上默认带有的两个页签
deleteui.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()
{

}

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

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

voidQTMdi::action2Triggered(boolchecked)
{
for(inti=0;i<ui.tabWidget->count();i++)
if(ui.tabWidget->tabText(i)==tr("Child2"))
{
ui.tabWidget->setCurrentIndex(i);
return;
}
child2*c2=newchild2(this);
ui.tabWidget->addTab(c2,tr("Child2"));
c2->showMaximized();
}

免责声明:文章转载自《使用Qt实现MDI风格的主窗体》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇vue3的一些基本常识(slot,ref)JVM 入门指南下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

QT5:类总结

一.QObject 类 QObject::d_ptr QObject::staticMetaObject QObject::staticQtMetaObject QObject::tr() QObject::event() QObject::parent() QObject::thread() QObject::connect() QObje...

认识WPF

新开一节WPF桌面开发的讲解,这节先初步认识一下什么是WPF。 1.简介 WPF是 Windows Presentation Foundation 的英文缩写,意为“窗体呈现基础”,是微软基于.NET Framework 3.0 推出的新一代构建窗体程序的框架。不同于WinForm,WPF实现了界面和开发分离,它的界面是由Xaml语言构建的,这种形式对前端...

glViewport()函数和glOrtho()函数的理解

在OpenGL中有两个比较重要的投影变换函数,glViewport和glOrtho.glOrtho是创建一个正交平行的视景体。 一般用于物体不会因为离屏幕的远近而产生大小的变换的情况。比如,常用的工程中的制图等。需要比较精确的显示。 而作为它的对立情况, glFrustum则产生一个透视投影。这是一种模拟真是生活中,人们视野观测物体的真实情况。例如:观察两...

Delphi 使用CHM文件制作系统帮助文档(上下文感知帮助的制作)

一、基础知识简介 使用帮助提示窗口或状态栏只能提供简单、单一的帮助,无法对某一模块或应用程序整体提供系统的 帮助,因此运行Windows应用程序,需要帮助时一般都可以通过执行帮助菜单获得整个应用程序的帮助,也可以 运行某一部分时单击帮助按钮或按“F1”键获得相关的帮助。Delphi应用程序能够方便地应用帮助系统。下面介 绍应用程序动态地运行帮助系统的方法。...

WPF一步步实现完全无边框自定义Window(附源码)

   在我们设计一个软件的时候,有很多时候我们需要按照美工的设计来重新设计整个版面,这当然包括主窗体,因为WPF为我们提供了强大的模板的特性,这就为我们自定义各种空间提供了可能性,这篇博客主要用来介绍如何自定义自己的Window,在介绍整个写作思路之前,我们来看看最终的效果。     图一 自定义窗体主界面   这里面的核心就是重写Window的Templ...

winform窗体(五)——布局方式

一、默认布局 ★可以加panel,也可以不加; ★通过鼠标拖动控件的方式,根据自己的想法布局。拖动控件的过程中,会有对齐的线,方便操作; ★也可选中要布局的控件,在工具栏中有对齐工具可供选择,也有调整各个控件大小的工具。 注:分层:右键点击控件。可以选择置于顶层或置于顶层。       锁定控件:当部分布局完成,为了操作失误,把布局好的打乱,可以选中布局...