概述
通过QPlatformIntegration *platformIntegration来创建。
创建windows窗口过程:
qtbasesrcpluginsplatformswindowsqwindowsglcontext.cpp
HWND QWindowsContext::createDummyWindow(const QString &classNameIn,
const wchar_t *windowName,
WNDPROC wndProc, DWORD style)
{
if (!wndProc)
wndProc = DefWindowProc;
QString className = registerWindowClass(classNameIn, wndProc);
return CreateWindowEx(0, reinterpret_cast<LPCWSTR>(className.utf16()),
windowName, style,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
HWND_MESSAGE, NULL, static_cast<HINSTANCE>(GetModuleHandle(0)), NULL);
}
创建窗口opengl上下文过程:
static HGLRC createContext(const QOpenGLStaticContext &staticContext,
HDC hdc,
const QSurfaceFormat &format,
const QWindowsOpenGLAdditionalFormat &,
HGLRC shared = 0)
{
const HGLRC result =
staticContext.wglCreateContextAttribsARB(hdc, shared, attributes);
}
platformIntegration的创建过程如下:
static void init_platform(const QString &pluginNamesWithArguments, const QString &platformPluginPath, const QString &platformThemeName, int &argc, char **argv)
{
QGuiApplicationPrivate::platform_integration = QPlatformIntegrationFactory::create(name, arguments, argc, argv, platformPluginPath);
}
通过下面的factory创建,key为“windows”代表windows系统。
corelibpluginqfactoryloader_p.h
template <class PluginInterface, class FactoryInterface, typename ...Args>
PluginInterface *qLoadPlugin(const QFactoryLoader *loader, const QString &key, Args &&...args)
{
const int index = loader->indexOf(key);
if (index != -1) {
QObject *factoryObject = loader->instance(index);
if (FactoryInterface *factory = qobject_cast<FactoryInterface *>(factoryObject))
if (PluginInterface *result = factory->create(key, std::forward<Args>(args)...))
return result;
}
return nullptr;
}
windows版qt支持direct2d、minimal、offscreen、webgl、windows几类窗口
windows窗口是由msvc2017/plugins/platforms/qwindowsd.dll创建的
最后
以上就是怡然白猫为你收集整理的C++学习(一六五)qt是如何决定使用何种操作系统窗口的全部内容,希望文章能够帮你解决C++学习(一六五)qt是如何决定使用何种操作系统窗口所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复