我是靠谱客的博主 怡然白猫,最近开发中收集的这篇文章主要介绍C++学习(一六五)qt是如何决定使用何种操作系统窗口,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

通过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是如何决定使用何种操作系统窗口所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(67)

评论列表共有 0 条评论

立即
投稿
返回
顶部