子窗体操作

父窗口继承QMainWindow类,在该类里面新建一个子窗口,该子窗口继承QDialog类

<span style="white-space:pre">	</span>StepDialog* m_pStepDialog;
<span style="white-space:pre">	</span>m_pStepDialog = new StepDialog(this);

然后对子窗口进行操作。

子窗口全屏显示

QT中窗口部件QWidget成员函数showFullScreen();是用于将窗口部件全屏显示,但是他只对窗口模式的部件有用。子窗口的特征是 Qt::SubWindow,不是独立的窗口。因此对其调用showFullScreen()无效。通过对对子窗口调 用:setWindowFlags(Qt::Dialog);或setWindowFlags(Qt::Window);将其设为窗口模式后,即可调用 showFullScreen();进行全屏显示了。

如果要还原为普通窗口,调用setWindowFlags(Qt::subwindow)将子窗口设置为非顶级窗口,再调用showNormal()还原子窗口显示。

参考

相对于子窗口的全屏显示方法,不得不提的是子窗口退出全屏的方法。

MFC中,子窗口退出全屏的方法简单直接,直接调用SetWindowPos()函数将子窗口显示到预定的位置即可。

QT中,直接使用move和resize对窗口定位是没有效果的。需要先将子窗口设位非窗口模式。之后再将窗口移到理想位置。

即先调用setWindowFlags(Qt::Dialog);或者setWindowFlags(Qt::SubWindow);在调用move和resize函数。

有人提到退出全屏时,调用showNormal(),再调setWindowFlags(Qt::SubWindow)。

这有两个问题:1)showNormal()也是只对顶级窗口有效。2)可以考虑先调用showNormal()将窗口设为原来大小,在将窗口设为子窗口模式。但这样窗口回到父窗口之中也不会显示原来的大小。

子窗口透明显示:

//	this->setWindowOpacity(0.7);//设置透明1-全体透明
	this->setAttribute(Qt::WA_TranslucentBackground, true);//设置透明2-窗体标题栏不透明,背景透明
	this->setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint); 

如果没有加上

this->setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint);

这一句,则设置透明时必须加上

this->setWindowOpacity(0.7);//设置透明1-全体透明 

设置子窗体到指定窗口:

一:子窗口创建方式:

Qt窗体上的子窗体一般是“new”创建的,当父窗体删除的时候,同时也会清理相关的子窗体;

如果子窗体不是“new”创建的,而是用static变量创建,关闭父窗体的时候会程序崩溃,原因应该是父窗体删除到static子窗体时不对;

如:

//主窗体函数:

void slot_newWidget()

{

//这样会导致问题;

// static NewQWidget1 nqwt(this);

// nqwt.show();

//一般创建方法:

NewQWidget1 * pNewQWidget1 = new NewQWidget1(this);

pNewQWidget1->show();

}

二:子窗口设置方式:

(1):通常情况下,对于一个继承与QWidget的子窗体,直接 new NewQWidget1(this);(或setparent(this)) 参数设置为父窗体,然后 show(),这样就可以在指定窗口上创建子窗口;

(2):如果 一个窗口继承与QDialog,用这种方法,

NewQWidget1 * pNewQWidget1 = new NewQWidget1(this);

pNewQWidget1->show();

只是创建了一个非模态对话框,如果想要这个飞模态对话框显示到指定窗口上,解决方法:

设置这个窗口的属性:

(1):pNewQWidget1->setWindowFlags(Qt::Widget); //直接设置QDialog为QWidget;

pNewQWidget1->show(); //设置后重新显示;

(2):

pNewQWidget1->setWindowFlags(Qt::SubWindow); //设置QDialog为子窗口属性;

pNewQWidget1->show(); //设置后重新显示;

(3):

pNewQWidget1->setWindowFlags(Qt::CustomizeWindowHint|Qt::FramelessWindowHint);//设置自定义无边框窗口;

pNewQWidget1->show(); //设置后重新显示;

以上简单列举三种方法,但是可以根据具体需求设置;

时间: 2024-10-01 06:25:56

子窗体操作的相关文章

window.opener 子窗体操作父窗体

以下是看到的一个例子: 1.父窗体main.html: 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 2 <HTML> 3 <head> 4 <script type="text/javascript"> 5 function OpenChildWindow () { 6 window.open ("sub.html"

C#父窗体跟子窗体的控件操作

很多人都苦恼于如何在子窗体中操作主窗体上的控件,或者在主窗体中操作子窗体上的控件.相比较而言,后面稍微简单一些,只要在主窗体中创建子窗体的时候,保留所创建子窗体对象即可. 下面重点介绍前一种,目前常见的有两种方法,基本上大同小异: 第一种,在主窗体类中定义一个静态成员,来保存当前主窗体对象,例如: public static yourMainWindow pCurrentWin = null; 然后在主窗体构造函数中,给静态成员初始化,如下: pCurrentWin = this; 那么在子窗体

C#如何操作另一个窗体:[1]主窗体操作子窗体(转)

方法/步骤 1 首先,我们建立一个项目,然后往窗体拖入一个按钮 2 我们在项目管理那里,右击,选择"添加",再选择"windows窗体" 3 我们回到窗体1,双击按钮,打开代码窗口   在代码窗口中,我们输入代码 Form2 a = new Form2(); a.Show(); 这几句话的意思是,实例化一个Form2,然后弹出窗体   我们启动程序测试,点击程序窗口中的按钮   OK,现在你看到form2弹出来   我们回到form1中,打开form1的代码,然后在

window.open()方法用于子窗口数据回调至父窗口,即子窗口操作父窗口

window.open()方法用于子窗口数据回调至父窗口,即子窗口操作父窗口 项目中经常遇到一个业务逻辑:在A窗口中打开B窗口,在B窗口中操作完以后关闭B窗口,同时自动刷新A窗口(或局部更新A窗口)(或将数据传回A窗口) 以下是从实际项目中截取出来和window.open()方法相关的代码,业务逻辑如下: 1. 点击父窗口的div标签(id="addMatchSchedule"),出发点击事件,打开子窗口: 2. 点击子窗口的button按钮,触发点击时间,即调用addSchduleI

js子窗口操作父窗口的标签

======================================父窗体 <input id="aaaa" type="button"/> function upfile()         {                         resultValue = window.showModelessDialog("ceshi.aspx?file=DownFile", window, "dialogWidt

C# 设置MDI子窗体只能弹出一个的方法

Windows程序设计中的MDI(Multiple Document Interface)官方解释就是所谓的多文档界面,与此对应就有单文档界面 (SDI), 它是微软公司从Windows 2.0下的Microsoft Excel电子表格程序开始引入的,Excel电子表格用户有时需要同时操作多份表格,MDI正好为这种操作多表格提供了很大的方便,于是就产生了MDI程序. 新建一个WindowForm程序.得到一个窗体作为我们父窗体Parent.拖入一个menustrip空间.在新建一个窗体FrmCh

Flex中利用事件机制进行主程序与子窗体间参数传递

在开发具有子窗体,或者itemrenderer的应用时,常常涉及到子窗体向父窗体传递参数或者从itemrenderer内的控件向外部的主程序传递参数的需求.这些都可以通过事件机制这一统一方法加以解决.在我的应用中有两个需求: 1.左侧的List控件的itemrenderer中包含CheckBox控件,当其状态改变时需要同时改变主程序中的一个数组变量的内容:2.左下方的"新增届次"按钮会弹出一个窗口,窗口中输入届次信息后需要修改数据库中的表,同时表的更改结果要能够在List控件中体现出来

跨窗体操作

Users uuu = new UsersData().SelectUser(uname, pwd); 跨窗体操作的时候,如果点开第二个窗体那么第一个窗体就要关闭,但是,一旦关闭第一个窗体那么第二个也会关闭,因为主窗体一关,其余的子窗体都会随着关闭,所以,要使用控件额属性,进行隐藏例如: Form2 f2 = new Form2(); f2.Show(); this.Visible = false; 在第二个通过第二个窗体来操控第一个窗体 Form1 F1 = null; public Form

调用子窗体中的控件

通常在主窗体上点击某处控件想弹出一个子窗体,在子窗体中做了一些操作,然后要在主窗体中调用子窗体中控件中的值,其实很简单,就是需要做到两点: 1.在主窗体的Form Class级new子窗体 frmDDL frmddl = new frmDDL(); frmButton frmbtn = new frmButton(); 2.将子窗体中需要在主窗体中调用的控件的Modifer属性设置为Public 3.主窗体代码中显示子窗体,new出子窗体中的按钮事件 ? 1 2 frmbtn.Show(); f