2014-03-03 80 views
8

我試圖在Qt中創建一個支持本機特性的無邊界窗口:航空捕捉,DWM調整大小和最小化,搖等 與Office 2013或Visual Studio 2012類似。但它們是用wpf編寫的。 在wpf和純WinApi中有很多示例,但我無法找到任何Qt示例。Qt中無界限窗口支持本機功能:航空捕捉,DWM調整大小和最小化

最近我找到了暴雪的Battle.net App(screenshot)。他們正在使用QT 4.8.5,他們的主窗口看起來和行爲完全符合我的需求。

有誰知道該怎麼做?

感謝您的幫助。

+0

雖然我不知道有關航空管理單元,您可以通過使用了QWidget :: setWindowFlags(),這將允許你自己繪製這些控件(這可能是什麼,實現這個battle.net應用程序正在看,因爲它有非常多的自定義菜單控件)。這裏有一篇非常好的文章:http://qt.developpez.com/tutoriels/braindeadbzh/customwindow/ - 下邊是法語。 –

+0

我的應用程序現在就是這樣。 Aero捕捉不起作用。當最小化時,窗口消失而沒有任何動畫。 – PKE

+0

我正在尋找相同的行爲。你找到了解決方案嗎?提前致謝。 –

回答

7

我發現解決此問題的解決方法。

我沒有使用Qt主窗口,而是創建了一個簡單的WinAPI無邊界窗口,如this SO discussion。然後我從QtWinMigrate項目中添加了QWinWidget,並用它填充了窗口。

因此,主窗口和可調整大小的邊緣由WinAPI處理,並且主窗口內的所有內容都由QWinWidget處理。使用QWinWidget,您可以創建Qt gui,就像在任何其他Qt應用程序中一樣。

Here is a small example project on GitHub.

+0

我需要用你的BorderlessWindow類替換一個QMainWindow子類。你認爲最好的方法是什麼? – louissmr

+0

我的類不是QT對象的子類。您可能應該用QWinWidget子類替換QMainWindow子類。 – PKE

1

或許,這可以幫助你,具體的Windows的Qt類WinExtras

http://qt-project.org/doc/qt-5/qtwin.html

http://qt-project.org/doc/qt-5/qtwinextras-module.html

除此之外,您還可以使用Qt Quick的2.0設計UI類似WPF

+0

按照你的建議,我試過這個課程。這個[示例](http://qt-project.org/doc/qt-5/qtwinextras-musicplayer-example.html)顯示了你可以用它們實現什麼。看起來很有趣,但仍然不是我所需要的。 – PKE

+0

@PKE winextras僅用於aero,用於自定義窗口和效果,您可以使用QT Quick 2.0,請參閱Qt的「示例和演示」二進制文件,當您安裝Qt時,您可以在開始菜單 - > Qt –

+0

中找到我不喜歡的在定製用戶界面方面沒有任何問題。我正在談論主窗口。 – PKE