maaGames
@maaGames
Погроммирую программы

Можно ли Встроить QT dialog в MFC CDialog?

Можно ли Встроить QT dialog в MFC CDialog?
Не важно, наследованием, инкапсуляцией или как-то ещё.
Знаю, что извращение, но выбора нет.
Приложение подерживает немодальные окна, в которых можно вставлять свои диалоги, унаследованные от CDialog. Хочется написть плагин на QT и использовать его не только с этим приложением, но и с другими и в виде stand-alone. Сейчас это получается только если писать с использованием MFC, но хочется перейти на более удобное программирование GUI и перестать страдать...
  • Вопрос задан
  • 275 просмотров
Решения вопроса 1
maaGames
@maaGames Автор вопроса
Погроммирую программы
В общем, для диалога (или любого виджета) получаем виндовый HWND, после чего впихиваем его в имеющийся диалог методом 'HWND oldparent =SetParent( HWND child, HWND parent)'. После этого виджет становится дочерним окном стандартных виндусовских диалогов, в том числе MFC-шных (с точки зрения пользователя ведёт себя как обычный контрол диалога, т.е. визуальной разницы никакой, что и требовалось получить). Перед удалением диалога нужно для виджета вернуть родителя.

#include <QtGui/5.12.6/QtGui/qpa/qplatformnativeinterface.h>

QWindow * windowForWidget( const QWidget * widget )
{
	QWindow * window = widget->windowHandle();
	if( window )
		return window;

	const QWidget * nativeParent = widget->nativeParentWidget();
	if( nativeParent )
		return nativeParent->windowHandle();

	return nullptr;
}

HWND getHWNDForWidget( const QWidget * widget )
{
	QWindow * window = ::windowForWidget( widget );
	if( window && window->handle() )
	{
		QPlatformNativeInterface * iface = QGuiApplication::platformNativeInterface();
		return static_cast<HWND>(iface->nativeResourceForWindow( QByteArrayLiteral( "handle" ), window ));
	}

	return nullptr;
}


5e1585cb462c4267495335.png
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
tsarevfs
@tsarevfs Куратор тега C++
C++ developer
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы