• qt模块依赖


    //1
    if (containsHowOften(deploymentInfo.deployedLibraries, "libQt5Gui")
        || containsHowOften(deploymentInfo.deployedLibraries, "libQt6Gui")) {
        LogDebug() << "libQt5Gui/libQt6Gui detected";
        pluginList.append("platforms/libqxcb.so");
        // pluginList.append("iconengines");
        // pluginList.append("imageformats");
        // Platform plugin contexts - apparently needed to enter special characters
        QStringList platformPluginContexts = QDir(pluginSourcePath + QStringLiteral("/platforminputcontexts")).entryList(QStringList() << QStringLiteral("*.so"));
        foreach(const QString &plugin, platformPluginContexts) {
            pluginList.append(QStringLiteral("platforminputcontexts/") + plugin);
        }
        // Platform OpenGL context
        if ((containsHowOften(deploymentInfo.deployedLibraries, "libQt5OpenGL"))
            or(containsHowOften(deploymentInfo.deployedLibraries, "libQt6OpenGL"))
            or(containsHowOften(deploymentInfo.deployedLibraries, "libQt5Gui"))
            or(containsHowOften(deploymentInfo.deployedLibraries, "libQt6Gui"))
            or(containsHowOften(deploymentInfo.deployedLibraries, "libQt5XcbQpa"))
            or(containsHowOften(deploymentInfo.deployedLibraries, "libQt6XcbQpa"))
            or(containsHowOften(deploymentInfo.deployedLibraries, "libxcb-glx")))

        //2
        if (containsHowOften(deploymentInfo.deployedLibraries, "libQt5Svg")
            || containsHowOften(deploymentInfo.deployedLibraries, "libQt6Svg")) {
            pluginList.append(QStringLiteral("iconengines/libqsvgicon.so"));
        }
        if (containsHowOften(deploymentInfo.deployedLibraries, "libQt5Network")) {
            appendPluginToList(pluginSourcePath, "bearer", pluginList);
        }
        if (containsHowOften(deploymentInfo.deployedLibraries, "libQt6Network")) {
            appendPluginToList(pluginSourcePath, "networkaccess", pluginList);
            appendPluginToList(pluginSourcePath, "networkinformation", pluginList);
            appendPluginToList(pluginSourcePath, "tls", pluginList);
        }
        // Sql plugins if QtSql library is in use
        if (containsHowOften(deploymentInfo.deployedLibraries, "libQt5Sql")
            || containsHowOften(deploymentInfo.deployedLibraries, "libQt6Sql")) {
            appendPluginToList(pluginSourcePath, "sqldrivers", pluginList);
        }
        // Multimedia plugins if QtMultimedia library is in use
        if (containsHowOften(deploymentInfo.deployedLibraries, "libQt5Multimedia")
            || containsHowOften(deploymentInfo.deployedLibraries, "libQt6Multimedia")) {
            appendPluginToList(pluginSourcePath, "audio", pluginList);
            appendPluginToList(pluginSourcePath, "mediaservice", pluginList);

            // This plugin is specific to Qt 6
            if (containsHowOften(deploymentInfo.deployedLibraries, "libQt6Multimedia")) {
                appendPluginToList(pluginSourcePath, "playlistformats", pluginList);
            }
        }
        // 3D plugins if Qt3D library is in use
        if (containsHowOften(deploymentInfo.deployedLibraries, "libQt63DRender")) {
            appendPluginToList(pluginSourcePath, "geometryloaders", pluginList);
            appendPluginToList(pluginSourcePath, "renderers", pluginList);
            appendPluginToList(pluginSourcePath, "renderplugins", pluginList);
            appendPluginToList(pluginSourcePath, "sceneparsers", pluginList);
        }
        // Sensors plugins if QtSensors library is in use
        if (containsHowOften(deploymentInfo.deployedLibraries, "libQt6Sensors")) {
            appendPluginToList(pluginSourcePath, "sensorgestures", pluginList);
            appendPluginToList(pluginSourcePath, "sensors", pluginList);
        }
        // CAN bus plugin if QtSerialBus library is in use
        if (containsHowOften(deploymentInfo.deployedLibraries, "libQt6SerialBus")) {
            appendPluginToList(pluginSourcePath, "canbus", pluginList);
        }

        // Text to speech plugins if QtTextToSpeech library is in use
        if (containsHowOften(deploymentInfo.deployedLibraries, "libQt6TextToSpeech")) {
            appendPluginToList(pluginSourcePath, "texttospeech", pluginList);
        }

        // Location plugins if QtLocation library is in use
        if (containsHowOften(deploymentInfo.deployedLibraries, "libQt6Location")) {
            appendPluginToList(pluginSourcePath, "geoservices", pluginList);
        }

        // Qt Quick plugins if QtQuick* libraries are in use
        if (containsHowOften(deploymentInfo.deployedLibraries, "libQt6Quick")) {
            appendPluginToList(pluginSourcePath, "qmltooling", pluginList);
            appendPluginToList(pluginSourcePath, "scenegraph", pluginList);
        }

        // Qt declarative plugins if QtDeclarative library is in use
        if (containsHowOften(deploymentInfo.deployedLibraries, "Qt6Declarative")) {
            appendPluginToList(pluginSourcePath, "qml1tooling", pluginList);
        }

        // Gamepad plugins if QtGamepad library is in use
        if (containsHowOften(deploymentInfo.deployedLibraries, "libQt6Gamepad")) {
            appendPluginToList(pluginSourcePath, "gamepads", pluginList);
        }

        // Web view plugins if QtWebView library is in use
        if (containsHowOften(deploymentInfo.deployedLibraries, "libQt6WebView")) {
            appendPluginToList(pluginSourcePath, "webview", pluginList);
        }

     
        QString sourcePath;
        QString destinationPath;

        // Qt WebEngine if libQt5WebEngineCore is in use
        // https://doc-snapshots.qt.io/qt5-5.7/qtwebengine-deploying.html
        // TODO: Rather than hardcode the source paths, somehow get them dynamically
        // from the Qt instance that is to be bundled (pull requests welcome!)
        // especially since stuff that is supposed to come from resources actually
        // seems to come in libexec in the upstream Qt binary distribution
        if (containsHowOften(deploymentInfo.deployedLibraries, "libQt5WebEngineCore")) {
            // Find directories with needed files:
            QString qtLibexecPath = qtToBeBundledInfo.value("QT_INSTALL_LIBEXECS");
            QString qtDataPath = qtToBeBundledInfo.value("QT_INSTALL_DATA");
            QString qtTranslationsPath = qtToBeBundledInfo.value("QT_INSTALL_TRANSLATIONS");
            // create destination directories:
            QString dstLibexec;
            QString dstResources;
            QString dstTranslations;
            if (fhsLikeMode){
                QFileInfo qfi(appDirInfo.binaryPath);
                QString qtTargetDir = qfi.absoluteDir().absolutePath() + "/../";
                dstLibexec = qtTargetDir + "/libexec";
                dstResources = qtTargetDir + "/resources";
                dstTranslations = qtTargetDir + "/translations";
            }
            else {
                dstLibexec = appDirInfo.path + "/libexec";
                dstResources = appDirInfo.path + "/resources";
                dstTranslations = appDirInfo.path + "/translations";
            }
            QDir().mkpath(dstLibexec);
            QDir().mkpath(dstResources);
            QDir().mkpath(dstTranslations);
            // WebEngine executable:
            sourcePath = QDir::cleanPath(qtLibexecPath + "/QtWebEngineProcess");
            destinationPath = QDir::cleanPath(dstLibexec + "/QtWebEngineProcess");
            copyFilePrintStatus(sourcePath, destinationPath);
            // put qt.conf file next to browser process so it can also make use of our local Qt resources
            createQtConfForQtWebEngineProcess(dstLibexec);
            // Resources:
            sourcePath = QDir::cleanPath(qtDataPath + "/resources/qtwebengine_resources.pak");
            destinationPath = QDir::cleanPath(dstResources + "/qtwebengine_resources.pak");
            copyFilePrintStatus(sourcePath, destinationPath);
            sourcePath = QDir::cleanPath(qtDataPath + "/resources/qtwebengine_devtools_resources.pak");
            destinationPath = QDir::cleanPath(dstResources + "/qtwebengine_devtools_resources.pak");
            copyFilePrintStatus(sourcePath, destinationPath);
            sourcePath = QDir::cleanPath(qtDataPath + "/resources/qtwebengine_resources_100p.pak");
            destinationPath = QDir::cleanPath(dstResources + "/qtwebengine_resources_100p.pak");
            copyFilePrintStatus(sourcePath, destinationPath);
            sourcePath = QDir::cleanPath(qtDataPath + "/resources/qtwebengine_resources_200p.pak");
            destinationPath = QDir::cleanPath(dstResources + "/qtwebengine_resources_200p.pak");
            copyFilePrintStatus(sourcePath, destinationPath);
            sourcePath = QDir::cleanPath(qtDataPath + "/resources/icudtl.dat");
            destinationPath = QDir::cleanPath(dstResources + "/icudtl.dat");
            copyFilePrintStatus(sourcePath, destinationPath);
            // Translations:
            sourcePath = QDir::cleanPath(qtTranslationsPath + "/qtwebengine_locales");
            destinationPath = QDir::cleanPath(dstTranslations + "/qtwebengine_locales");
            recursiveCopy(sourcePath, destinationPath);
        }

        if (!extraQtPlugins.isEmpty()) {
            LogNormal() << "Deploying extra plugins.";
            foreach(const QString &plugin, extraQtPlugins) {
                QDir pluginDirectory(pluginSourcePath + "/" + plugin);
                if (pluginDirectory.exists()) {
                    //If it is a plugin directory we will deploy the entire directory
                    QStringList plugins = pluginDirectory.entryList(QStringList() << QStringLiteral("*.so"));
                    foreach(const QString &pluginFile, plugins) {
                        pluginList.append(plugin + "/" + pluginFile);
                        LogDebug() << plugin + "/" + pluginFile << "appended";
                    }
                }
                else {
                    //If it isn't a directory we asume it is an explicit plugin and we will try to deploy that
                    if (!pluginList.contains(plugin)) {
                        if (QFile::exists(pluginSourcePath + "/" + plugin)) {
                            pluginList.append(plugin);
                            LogDebug() << plugin << "appended";
                        }
                        else {
                            LogWarning() << "The plugin" << pluginSourcePath + "/" + plugin << "could not be found. Please check spelling and try again!";
                        }
                    }
                    else {
                        LogDebug() << "The plugin" << plugin << "was already deployed.";
                    }
                }
            }
        }
     

  • 相关阅读:
    Vue中对于指令的介绍
    华秋电子众多代理线的车规级新品亮相汽车电子研讨会现场
    云上办公兴起,华为云桌面Workspace更靠谱
    应该下那个 ActiveMQ
    Druid实现SQL监控、慢SQL记录、Spring监控、去广告
    怎么提取视频中的音乐保存到本地?其实方法很简单
    jmeter利用自身代理录制脚本
    PGSQL断开某个数据库的链接
    win7常见问题
    Games104 现代游戏引擎3
  • 原文地址:https://blog.csdn.net/jijie_ming/article/details/132801084