子窗体操作

父窗口继承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(); //设置后重新显示;


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


原文地址:https://www.cnblogs.com/SunkingYang/p/11049217.html