2010-12-14 2 views
0

Мне нужно отобразить полноэкранное окно DirectX из приложения Qt.События клавиатуры Qt с DirectX fullscreen

Хотя DirectX больше не поддерживается Qt, это должно быть достаточно простым - просто переопределите QWidget, предоставите свой собственный paintEvent() и установите атрибут WA_PaintOnScreen.

Но когда приложение полноэкранное, DirectX захватывает все входы мыши и клавиатуры - поэтому единственный выход из приложения - ctrl-alt-del.

пс. Даже если бы я написал обработчики клавиатуры DirectX, мне все равно пришлось бы найти способ создания правильного события Qkeypress для перехода к Qt.

Кто-нибудь это сделал? Или есть простой способ сказать DirectX не хватать клавиатуру?

ответ

1

Насколько мне известно, Direct3D не получает клавиатуру. Ваша проблема скорее возникает из-за того, что Direct3D в полноэкранном режиме - совсем другой зверь. Такие вещи, как GDI (которые Qt может использовать для рендеринга) не работают по умолчанию, время выполнения перехватывает множество бит информации. Тогда эта информация, по-видимому, никогда не сможет попасть в Qt. Параметры, которые у вас есть, - это повторная реализация Qt для рендеринга с использованием Direct3D (проект Lighthouse?) Или для использования псевдо-полного экрана. Обычно это делается путем создания окна, в котором клиентская область имеет тот же размер, что и экран, а затем правильно позиционирует его.

Последнее, вероятно, будет самым простым решением ...

+0

Да Мне нужен только D3D для полноэкранной части - поэтому я просто рисую прямо на поверхность D3D изнутри Qt. Горячие клавиши, которые являются частью драйвера D3D, все еще работают - так что мне кажется, что я должен написать какой-то D3D keyb hook. Это также означает, что рисование Qt-меню над поверхностью D3D, вероятно, очень сложно. –

0

Был попытка получить D3DWidget рода вещи в Qt 4,3-4,5 или что-то в этом роде, но он никогда не был стабилизирован или одобрен, а затем даже удален.

Возможно, действительно, маяк - это вариант (со средним объемом работы, в основном связанный с материалом OS/DX для материала Qt), или вы можете взглянуть на старый код direct3D в старых ветвях Qt. Я никогда не использовал его, и он, вероятно, не предназначен для использования с последними версиями Qt, но это лучше, чем ничего.

+0

Средство рендеринга DirectX было удалено (предположительно), потому что им нужна кросс-платформа, а будущее Qt действительно на мобильных телефонах. –

+0

@Martin: действительно, я читал, что между строками тоже ... OpenGL прекрасно интегрирован, это плюс! – rubenvb

Смежные вопросы