Skip to content

RealChuan/Qt-App

Folders and files

NameName
Last commit message
Last commit date
Mar 4, 2025
Mar 4, 2025
Mar 4, 2025
May 20, 2024
May 23, 2024
Mar 4, 2025
Mar 4, 2025
May 20, 2024
Mar 4, 2025
Aug 2, 2023
Mar 29, 2024
May 23, 2024
May 20, 2024
Aug 2, 2023
Mar 4, 2025
Mar 4, 2025
Mar 4, 2025
May 21, 2024
Mar 4, 2025

Repository files navigation

Qt-App

图片资源等来自于互联网。 本代码仓库,仅供学习,若被他人用于商业用途 与本人无关! 请遵守许可证!

Qt-App

CrashReport

崩溃报告程序;

代码结构

  1. cmake:封装的CMake实用函数;
    1. utils:实用函数;
  2. docs:文档说明和图片;
  3. examples:示例代码;
  4. packaging:打包和发布;
  5. src:源码;
    1. 3rdparty:第三方库;

      1. qtlockedfile:Qt文件锁;
      2. qtsingleapplication:Qt单实例;
    2. aggregate:聚合;

    3. apps:应用程序;

      1. app:Qt-App;
      2. crashreport:CrashReport;
    4. core:插件都继承于此;

    5. dump:崩溃捕捉功能;

      1. breakpad:基于Google Breakpad封装的崩溃捕捉;

      2. crashpad:基于Google Crashpad封装的崩溃捕捉;

        在unix系统下,可能需要对crashpad_handler赋予执行权限,否则无法正常启动。

        chmod +x crashpad_handler
    6. extensionsystem:插件系统,代码来自于Qt-Creator,做了一些修改;

    7. gui:封装的界面组件;

    8. plugins:插件;

      1. aboutplugin:关于插件;
      2. coreplugin:核心插件,主界面、菜单、工具栏、状态栏、设置、插件管理器等;
      3. guiplugin:GUI插件,一些基于QSS样式定制的GUI组件;
      4. hashplugin:哈希插件,QT提供的哈希算法;
      5. helloplugin:Hello插件,用于测试插件开发;
      6. systeminfoplugin:系统信息插件;
    9. resource:图片和QSS文件;

    10. utils:工具函数封装;

  6. translations:翻译文件;

问题和备注

  • MacOS,cmake生成的bundle,在.app/Contents/文件夹下没有生成PkgInfo文件;

    1. app/CMakeLists,使用这个CMakeLists.txt可以在MacOS上生成bundle,也可以正常显示图标,但是没有PkgInfo文件;
    2. cmake该怎么生成PkgInfo文件?
      1. WireShark使用set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/PkgInfo PROPERTIES MACOSX_PACKAGE_LOCATION .)类似这种方式,拷贝到bundle中;
    3. qmake默认会生成PkgInfo文件,只需要指定TARGET=app或者CONFIG+=bundle即可;
  • Unix 系统下,需要尽量使用静态库,避免动态库的依赖问题;

    1. 本项目有几个模块是动态库,因为是plugin,需要动态加载;
    2. 然后需要对这几个动态库进行打包,然后在运行时加载,还需要对rpath"-Wl,-rpath,\'\$$ORIGIN\':\'\$$ORIGIN/lib\':'\$$ORIGIN/../lib'"),进行设置,否则会找不到动态库;
    3. 或者使用install_name_tool(macos)、patchelf/chrpath(linux)修改动态库的依赖路径,非常麻烦;
    4. 还要考虑到这些库都是可以共享的,所以不要重复打包;
    5. 具体可以看workflows
  • MacOS,vcpkg编译第三方库问题;

    1. 由于vcpkg目前只支持单独编译x64-osx和arm64-osx
    2. 在使用cmake时,需要指定CMAKE_OSX_ARCHITECTURES=x86_64或者CMAKE_OSX_ARCHITECTURES=arm64;
    3. 在使用qmake时,需要指定QMAKE_APPLE_DEVICE_ARCHS=x86_64或者QMAKE_APPLE_DEVICE_ARCHS=arm64
  • 国际化实时翻译,当前更改完翻译设置,需要重启程序才能生效;

    1. 更新翻译的命令

       cmake --build build --target Qt-App_lupdate
    2. 懒得改代码了;

    3. 具体参考:QT实用小技巧(想到就更新),核心代码;

      void Widget::changeEvent(QEvent *e)
      {
         QWidget::changeEvent(e);
         switch (e->type()) {
         case QEvent::LanguageChange:
            comboBox->setItemText(0, tr("Hello"));
            label->setText(tr("Hello")); // 代码添加的文字
            ui->retranslateUi(this);     // 有UI文件情况下
            break;
         default: break;
         }
      }