QT 全屏显示子窗口

QT 中全屏显示子窗口的方法 QT 中窗口部件 QWidget 成员函数 showFullScreen();是用于将窗口部件全屏显示 但是他只对窗口模式的部件有用。子窗口的特征是 Qt::SubWindow不是独立的窗 口。因此对其调用 showFullScreen无效。通过对子窗口调用setWindowFlags Qt:


:Dialog或 setWindowFlagsQt::Window将其设为窗口模式后即可 调用 showFullScreen();进行全屏显示了。 相对于子窗口的全屏显示方法不得不提的是子窗口退出全屏的方法。 MFC 中子窗口退出全屏的方法简单直接直接调用 SetWindowPos函数将子 窗口显示到预定的位置即可。 QT 中 直接使用 move 和 resize 对窗口定位是没有效果的。 需要先将子窗口设位非 窗口模式。之后再将窗口移到理想位置。

即先调用 setWindowFlags Qt::Dialog 或者 setWindowFlags Qt::SubWindow 在调用 move 和 resize 函数。 有人提到退出全屏时 调用 showNormal 再调 setWindowFlags Qt::SubWindow 。 这有两个问题1showNormal也是只对顶级窗口有效。2可以考虑先调用 showNormal将窗口设为原来大小在将窗口设为子窗口模式。但这样窗口回到 父窗口之中也不会显示原来的大小。

QT 如何使窗体初始最大化
今天我想让一个窗体初始运行最大化本以为很简单一个问题花了差不多两个小 时才解决真是痛苦 问题一但解决其实非常简单 QT 中有一个

void QWidget::setWindowState ( Qt::WindowStateswindowState )
这样的函数通过它可以设置窗体的初始状态Qt::WindowStates 一共有下面几 种状态
Constant Value Description The window has no state set (in normal state).

Qt::WindowNoState Qt::WindowMinimized

0x00000000 0x00000001

The window is minimized (i.e. iconified).

Qt::WindowMaximized Qt::WindowFullScreen Qt::WindowActive

0x00000002 0x00000004 0x00000008

The window is maximized with a frame around it. The window fills the entire screen without any frame around it. The window is the active window, i.e. it has keyboard focus.

有了这个就非常 easy 了想让窗体最大化只需要
setWindowState(Qt::WindowMaximized);就行了

qml 中注册和使用 C++对象 以及在 qml 中实现窗体最大最小 化
在 main 函数中相关代码如下 QApplication app(argc, argv); QDeclarativeView view ; //将 app 注册到 qml 中方便对主程序的退出最大最小化等相关操作 view.rootContext()->setContextProperty("WindowQuitControl",&app); view.rootContext()->setContextProperty("WindowControl",&view); 同时需要导入的文件头 #include 这里将 app 和 QDeclarativeView 对象注册到 QML 中在 QML 中通过引用 "WindowQuitControl"和"WindowControl"接下来的 qml 文件中都会使用这两个名 字就可以像在 C++中使用 app 和 view 一样 这里的 view 可以是 QDeclarativeView也可以是 QmlApplicationViewer。如果用 系统自动生成的 QtQuick 应用程序是后面这个对象因为代码有特殊需求所以用了 前面那个

1、之所以将 app 注册到 qml 中是因为 QDeclarativeView 没有 quit()方法所以 如果在 qml 中使用 Qt.quit()会提示 signal quit 没有接受者我的一个解决办法就是 将 app 注册到 qml 中通过在 qml 中使用 //***.qml …… MouseArea{ onClicked: WindowQuitControl.quit(); } …… 这样就可以同样退出程序。 当如如果想在退出程序之前做一些操作可以讲相关的类注册到 qml 中然后再相 应的类似 quit 方法的方法里写入相关操作然后再 qml 中调用就行 ps: 如果这里的 view 声明为 QmlApplicationViewer view; 在 qml 中使用 Qt.quit(),就不会有说 quit 方法没有接收者 然后就无法退出的问题了

2、关于窗体最大、最小化的问题 如果想在 qml 中实现某个按钮单击之后可以最大或最小化 可以像上述那样把 view 注册到 qml 中然后再 qml 中调用 onClicked: WindowControl.showFullScreen(); onClicked: WindowControl.showMinimized(); 来实现最小化全屏展示。 而通过下面这个句子

WindowControl.lower();
可以将窗体置于最底层而不是最小化。但如果写到手机应用程序中就可以在效果 上实现最小化类似于后台运行

补充一句由于特殊需要当实现的应用程序没有外框的时候必须自己实现最大 最小化效果 所以才会有上述的函数的调用。 如果用 windows 自己的界面边框风格 鼠标点击或屏幕触摸就可以实现最大最小化。 3、在去了边框如何去边框参考我之前的 blog之后单纯调用 showMaximized 等方法是没有效果的。 这是因为在 view 的更改大小的模式默认被设置成 SizeViewToRootObject需要 自己修改 ResizeMode。代码片段如下 //设置模式 Mode 为可以调整 qml 大小默认 QDeclarativeView::SizeViewToRootObject view.setResizeMode(QDeclarativeView::SizeRootObjectToView); view.showMaximized(); 如果 view 是 QmlApplicationViewer那么参数就是 QmlApplicationViewer::SizeRootObjectToView

Qt 中窗体最大最小化以及窗口大小修改的相关函数使用2
在上一篇文章中说过调用 view 的一些 show、showNormal、showMaximized 等方 法来实现窗口正常显示。 但后来在实现的过程中发现 窗口的最大化和全屏是一个效果的这完全不符合自己当初的意愿啊 尤其是在 qml 中调用 view 的这些 show 方法可以使用的函数就更少了十分的不 方便。 最后经过一天的实验最后总算有个解决办法了。

用到的函数有

view->showNormal();

view->showMinimized();
view->showFullScreen(); view->showMaximized(); 上面这几个就不说了 1、为了能够设置窗体的长宽和坐标位置需要用到这几个函数 QApplication::desktop()->width() QApplication::desktop()->height() 这两个函数可以获得当前桌面的长宽也就是最大分辨率里面的长宽 需要导入文件 #include #include

2、这里的长宽是包含例如 windows 底部的状态条在内的宽度。 为了获得桌面有效的宽度可以使用这个方法 QApplication::desktop()->availableGeometry().width() QApplication::desktop()->availableGeometry().height() 这个方法里面就会得到除去状态条的长宽。

3、设置 view 的显示坐标 view->setGeometry(0,0, QApplication::desktop()->availableGeometry().width(), QApplication::desktop()->availableGeometry().height() ); 这里的设置坐标参数为前两个表示窗体的 x、y 坐标

后两个是长宽通过这个方法就可以实现最大化而不是全屏展示了 提到最大化 view->setMaximumHeight(maxh); view->setMaximumWidth(maxw); 这两个也可实现设置最大长宽度然后在里面给出窗体的最大最小长度。 但是使用这个函数就不能调用 showNormal 之类的方法让它显示成小窗体了。 本文探讨的这些方法的特殊情况都是在应用程序窗体没有边框的情况下如果使 用 qt 自带的就不会有这些问题了 那么遇到这种情况怎么办呢,不使用 showNormal 了改用 setGeometry.记得使用 pressedEvent 和 moveEvent 记录鼠标的动作… 4、resize 函数 resize(w,h) Qt 中显示固定尺寸的函数将窗体设置成指定的长宽

综上这些方法的组合就能够解决大部分的窗体需求了哈哈不行的话再深入学 习 qt还有好多没有尝试的方法呢