標籤:qt
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 <QDeclarativeContext> 這裡將 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 <QDesktopWidget> #include <QtGui/QApplication>
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還有好多沒有嘗試的方法呢
QT 全螢幕顯示子視窗