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