QT 全屏显示子窗口

QT 全屏显示子窗口

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


: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 <QDeclarativeContext> 这里将 app 和 QDeclarativeView 对象注册到 QML 中在 QML 中经过引用 "WindowQuitControl"和"WindowControl"接下来的 qml 文件中都会使用这两个名 字就能够像在 C++中使用 app 和 view 同样 这里的 view 能够是 QDeclarativeView也能够是 QmlApplicationViewer。若是用 系统自动生成的 QtQuick 应用程序是后面这个对象由于代码有特殊需求因此用了 前面那个

一、之因此将 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 方法没有接收者 而后就没法退出的问题了

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

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

补充一句因为特殊须要当实现的应用程序没有外框的时候必须本身实现最大 最小化效果 因此才会有上述的函数的调用。 若是用 windows 本身的界面边框风格 鼠标点击或屏幕触摸就能够实现最大最小化。 三、在去了边框如何去边框参考我以前的 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(); 上面这几个就不说了 一、为了可以设置窗体的长宽和坐标位置须要用到这几个函数 QApplication::desktop()->width() QApplication::desktop()->height() 这两个函数能够得到当前桌面的长宽也就是最大分辨率里面的长宽 须要导入文件 #include <QDesktopWidget> #include <QtGui/QApplication>

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

三、设置 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 记录鼠标的动做… 四、resize 函数 resize(w,h) Qt 中显示固定尺寸的函数将窗体设置成指定的长宽

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

相关文章
相关标签/搜索