1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/XMuli-QtExamples

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
WINDOWS_MSVC_MinGW & LINUX_GCC & MACOS_CLANG 所遇到奇葩问题集锦.md 16 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 26.11.2024 01:43 7fc9823

WINDOWS_MSVC_MinGW & LINUX_GCC & MACOS_CLANG 所遇到奇葩问题集锦

Содержание

[toc]

Сначала всё разрабатывалось на Linux: UOS/Deepin, Ubuntu, ArchLinux. Позже автор перешёл на MacOS и иногда возвращался к Linux. Сейчас разработка ведётся преимущественно на Windows. В статье собраны проблемы, с которыми автор столкнулся в процессе разработки, а также некоторые вопросы, связанные с офисным и инструментальным программным обеспечением.

  1. WINDOWS & MSVC & MinGW
  2. LINUX & GCC
  3. MACOS & CLANG
  4. Офисное и домашнее программное обеспечение
  5. Жизнь, карьера, размышления (будет написано позже)

PUBLIC 所遇到奇葩问题集锦

QtCreator

  1. При использовании Qt Creator для повышения уровня компонентов пользовательского интерфейса операция выполняется следующим образом. Компиляция проходит успешно как с MSVC, так и с WinGW.

    Обычно ошибка выглядит так: "ui_mainui.h:22:10: fatal error: chatinputedit.h: No such file or directory
     #include "chatinputedit.h"
              ^~~~~~~~~~~~~~~~~“
    [Решение] Не добавлять Global, и CMake добавляет include_directories, чтобы указать путь к этому файлу заголовка.

    1. `promoted to` Повысьте уровень самоопределяемого компонента управления, как показано на рисунке, затем добавьте в CMakeLists.txt путь, содержащий этот файл заголовка, добавив `include_directories(${PROJECT_SOURCE_DIR}/widgets)`, чтобы исправить компиляцию после повышения уровня пользовательского интерфейса Qt Design, которая не удалась из-за того, что MinGW не смог найти файл.
          
       - Если вы хотите понизить уровень существующего Q-контрола, используйте `Demote to`.
       - Если вам нужно использовать только MSVC для компиляции, добавьте пользовательский класс после `Promoted class name:` на изображении выше, а затем автоматически сгенерируйте файл после `Header file:`, и не пишите строку include_directories. Вы можете напрямую скомпилировать её без проблем.
      
  2. На Mac 13 при использовании Clang64 для компиляции Qt+CMake возникает ошибка: :-1: error: ninja: build stopped: subcommand failed.

    [Решение] 1. Возможно, kit не настроен должным образом. 2. CMake не установлен должным образом. 3. В CMakeList.txt есть синтаксическая ошибка, которую необходимо устранить (обычно это так).

  3. xx


WINDOWS 所遇到奇葩问题集锦

NT/MSVC 编译 разработки проблемы

  1. Как установить Visual Studio Install для использования английского языка?

    [Решение] Добавьте --locale en-US после запуска программы.

  2. QString преобразуется в char * странным образом, иногда происходит сбой?!

    [Решение] Разделите преобразование на два шага, чтобы избежать проблем, но прямое преобразование в один шаг иногда вызывает проблемы в MSVC.

    В https://github.com/feiyangqingyun/qtkaifajingyan в строке 185 обобщены аналогичные проблемы и решения, которые были обнаружены и изучены автором. Это действительно ценный урок.

      QString text = "xxxxx";
      //下面这样转换很可能会有问题
      char *data = text.toUtf8().data();
      //分两步转换肯定不会有问题
      QByteArray buffer = text.toUtf8();
      char *data = buffer.data();
      const char *data = buffer.constData();
      
  3. Проблемы с компиляцией проекта, вызванные Microsoft SDK.

  4. Win10 20H2 использует VS2019, перетаскивание окон приводит к сбою!

  5. VS2019 отладка Qt5, QString отображается как адрес памяти, а не строка!

  6. Проблема, вызванная Notepad, встроенным в Microsoft. Возврат каретки (CR) и перевод строки (LF).

  7. Отладка Visual Studio с использованием точек останова, стрелки смещаются в неправильную функцию.

  8. Qt Creator (Qt 15.2) компилируется успешно при использовании MinGW, но не компилируется при использовании MSVC 2022!

    [Решение] Некоторые китайские комментарии могут привести к ошибкам компиляции (упс!).

    Файлы .h.cpp в MSVC используют формат UTF8-BOM.

    
      
  9. Qt Creator (Qt 15.2), используя MinGW, терминал на китайском языке не искажается, но при использовании MSVC 2022 искажается.

    [Решение] Некоторые китайские комментарии приводят к ошибкам компиляции (упс!). Установите utf-8 в CMake.

    Файлы .h.cpp в MSVC используют формат UTF8-BOM. Одновременно можно обратиться к пункту 8.

      # 采用 MSVC 终端上的中文不乱码
    if (MSVC)
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /utf-8")
        add_compile_options(/source-charset:utf-8 /execution-charset:utf-8) // 根据实际可注释
    endif()
      
  10. Получение аудиовхода и вывода с помощью Qt 5.15, использование MinGW получает только одну копию, использование MSVC 2022 получает повторяющуюся информацию.

    [Решение] Подробные параметры действительно отличаются. Как удалить дубликаты, ещё предстоит выяснить. Решено вручную написать алгоритм для удаления дубликатов.

    MSVC и MinGW имеют ещё одно отличие.

      【Проблема исходного кода и отображения печати】
        // Получение списка аудиоустройств ввода
        QList inputDevices =
    

qDebug() << "Список аудиоустройств ввода:";
for (const QAudioDeviceInfo& deviceInfo : inputDevices) {
    qDebug() << "Название устройства: " << deviceInfo.deviceName();
    qDebug() << "Поддерживаемые частоты дискретизации: " << deviceInfo.supportedSampleRates();
    qDebug() << "Поддерживаемое количество каналов: " << deviceInfo.supportedChannelCounts();
    qDebug() << "Поддерживаемые размеры выборки: " << deviceInfo.supportedSampleSizes();
    qDebug() << "Поддерживаемые форматы кодирования: " << deviceInfo.supportedCodecs();
    qDebug() << "-------------------------------------";
}

// Получение списка аудиоустройств вывода
QList<QAudioDeviceInfo> outputDevices = QAudioDeviceInfo::availableDevices(QAudio::AudioOutput);
qDebug() << "Список аудиоустройств вывода:";
for (const QAudioDeviceInfo& deviceInfo : outputDevices) {
    qDebug() << "Название устройства: " << deviceInfo.deviceName();
    qDebug() << "Поддерживаемые частоты дискретизации: " << deviceInfo.supportedSampleRates();
    qDebug() << "Поддерживаемое количество каналов: " << deviceInfo.supportedChannelCounts();
    qDebug() << "Поддерживаемые размеры выборки: " << deviceInfo.supportedSampleSizes();
    qDebug() << "Поддерживаемые форматы кодирования: " << deviceInfo.supportedCodecs();
    qDebug() << "-------------------------------------";
}

**MSVC компилятор:**
[debug] Название устройства: «Микрофонный массив (подходит для цифровых микрофонов Intel? Smart Sound Technology)»
[debug] Поддерживаемые частоты дискретизации: (8000, 11025, 16000, 22050, 32000, 44100, 48000, 88200, 96000, 192000)
[debug] Поддерживаемое количество каналов: (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18)
[debug] Поддерживаемый размер выборки: (8, 16, 24, 32, 48, 64)
[debug] Поддерживаемый формат кодирования: («audio/pcm»)
[debug] -------------------------------------
[debug] Название устройства: «Микрофонный массив (подходит для цифровых микрофонов Intel? Smart Sound Technology)»
[debug] Поддерживаемые частоты дискретизации: ()
[debug] Поддерживаемое количество каналов: (1, 2)
[debug] Поддерживаемый размер выборки: ()
[debug] Поддерживаемый формат кодирования: («audio/pcm»)
[debug] -------------------------------------
[debug] m_speakerDevices Название устройства: «Динамик (Realtek(R) Audio)»
[debug] Поддерживаемые частоты дискретизации: (8000, 11025, 16000, 22050, 32000, 44100, 48000, 88200, 96000, 192000)
[debug] Поддерживаемое количество каналов: (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18)
[debug] Поддерживаемый размер выборки: (8, 16, 24, 32, 48, 64)
[debug] Поддерживаемый формат кодирования: («audio/pcm»)
[debug] -------------------------------------
[debug] m_speakerDevices Название устройства: «P27q-30 (NVIDIA High Definition Audio)»
[debug] Поддерживаемые частоты дискретизации: (8000, 11025, 16000, 22050, 32000, 44100, 48000, 88200, 96000, 192000)
[debug] Поддерживаемое количество каналов: (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18)
[debug] Поддерживаемый размер выборки: (8, 16, 24, 32, 48, 64)
[debug] Поддерживаемый формат кодирования: («audio/pcm»)
[debug] -------------------------------------
[debug] m_speakerDevices Название устройства: «P27q-30 (NVIDIA High Definition Audio)»
[debug] Поддерживаемая частота дискретизации: (48000)
[debug] Поддерживаемое количество каналов: (2)
[debug] Поддерживаемый размер выборки: (8, 16, 24, 32, 64)
[debug] Поддерживаемый формат кодирования: («audio/pcm»)
[debug] -------------------------------------
[debug] m_speakerDevices Название устройства: «Динамик (Realtek(R) Audio)»
[debug] Поддерживаемая частота дискретизации: (48000)
[debug] Поддерживаемое количество каналов: (2)
[debug] Поддерживаемый размер выборки: (8, 16, 24, 32, 64)
[debug] Поддерживаемый формат кодирования: («audio/pcm»)
[debug] -------------------------------------

**MinGW компилятор:**
[debug] Название устройства: «Микрофонный массив (подходит для цифровых микрофонов Intel? Smart Sound Technology)»
[debug] Поддерживаемые частоты дискретизации: (8000, 11025, 16000, 22050, 32000, 44100, 48000, 88200, 96000, 192000)
[debug] Поддерживаемое количество каналов: (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18)
[debug] Поддерживаемый размер выборки: (8, 16, 24, 32, 48, 64)
[debug] Поддерживаемый формат кодирования: («audio/pcm»)
[debug] -------------------------------------
[debug] m_speakerDevices Название устройства: «Динамик (Realtek(R) Audio)»
[debug] Поддерживаемые частоты дискретизации: (8000, 11025, 16000, 22050, 32000, 44100, 48000, 88200, 96000, 192000)
[debug] Поддерживаемое количество каналов: (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18)
[debug] Поддерживаемый размер выборки: (8, 16, 24, 32, 48, 64)
[debug] Поддерживаемый формат кодирования: («audio/pcm»)
[debug] -------------------------------------
[debug] m_speakerDevices Название устройства: «P27q-30 (NVIDIA High Definition Audio)» ## MACOS & CLANG: сборник необычных проблем

1. xxx

## Дополнительная информация

Также обнаружил несколько интересных выводов, связанных с разработкой Qt, CMake и Windows. Можно посмотреть и изучить, многие проблемы после неустанной ночной отладки обнаруживают, что они уже были решены другими людьми. Ищите ключевые слова, обычно это приносит неожиданную радость.

Жизнь коротка, берегите себя и проводите больше времени с семьёй.

- [Летающий Ян Цин Юнь, опыт разработки Qt за последние десять лет](https://github.com/feiyangqingyun/qtkaifajingyan)
- [XMuli, QtExamples, использование и принципы работы компонентов, анализ фреймворка перерисовки DTK; распространённые приёмы IDE](https://github.com/XMuli/QtExamples)
- [wangwenx190, заметки, сделанные в процессе изучения программирования, CMAKE, Qt, MSVC и др.](https://github.com/wangwenx190/notes)

Если есть более качественные подборки, пожалуйста, предложите PR для дополнения.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/XMuli-QtExamples.git
git@api.gitlife.ru:oschina-mirror/XMuli-QtExamples.git
oschina-mirror
XMuli-QtExamples
XMuli-QtExamples
master