您好,登錄后才能下訂單哦!
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還有好多沒有嘗試的方法呢
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。