2010-12-14 71 views
0

我需要從Qt應用程序中顯示全屏DirectX窗口。使用DirectX全屏Qt鍵盤事件

儘管Qt不再直接支持directX,但應該很容易 - 只需重寫QWidget,提供自己的paintEvent()並設置WA_PaintOnScreen屬性。

但是,當應用程序是全屏幕DirectX抓住所有的鼠標和鍵盤輸入 - 所以出應用程序的唯一出路是ctrl-alt-del。

ps。即使我編寫DirectX鍵盤處理程序,我仍然需要找到創建正確的Qkeypress事件傳遞給Qt的方法。

有沒有人這樣做?或者有沒有一種簡單的方法可以讓DirectX不要抓住鍵盤?

回答

1

據我所知Direct3D沒有得到鍵盤。您的問題更可能是由於全屏Direct3D是完全不同的野獸。像GDI(Qt很可能用於渲染)在默認情況下不起作用,運行時鉤住大量信息。那麼這個信息大概從來沒有設法去Qt。你有的選擇是重新實現Qt渲染使用Direct3D(燈塔項目?)或使用僞全屏。這通常是通過創建一個窗口來實現的,該窗口具有與屏幕大小相同的客戶區,然後正確定位。

後者將可能是最簡單的解決方案......

+0

是的我只需要D3D的全屏幕部分 - 所以我只需從Qt內部直接繪製到D3D表面。作爲D3D驅動程序一部分的熱鍵仍然有效 - 所以看起來我必須編寫某種D3D keyb鉤子。這也意味着在D3D表面上繪製Qt菜單可能非常困難。 – 2010-12-15 17:18:42

0

有企圖獲得D3DWidget這種事情在Qt的4.3-4.5或類似的東西,但它從來沒有被穩定或批准,後來連除去。

也許確實燈塔是一個選項(中等工作量,基本上將OS/DX的東西鏈接到Qt的東西),或者你可以看看舊的Qt分支舊的direct3D代碼。我從來沒有使用它,它可能不打算用於最新版本的Qt,但它總比沒有好。

+0

DirectX渲染器被刪除(據推測),因爲他們想要跨平臺和Qt的未來真的在手機上。 – 2010-12-15 17:16:44

+0

@Martin:的確,我讀過這些行之間的內容...... OpenGL很好地集成在一起,這是一個很好的例子! – rubenvb 2010-12-15 20:33:04