WINDOWS_MSVC_MinGW & LINUX_GCC & MACOS_CLANG 所遇到奇葩问题集锦
Содержание
[toc]
Сначала всё разрабатывалось на Linux: UOS/Deepin, Ubuntu, ArchLinux. Позже автор перешёл на MacOS и иногда возвращался к Linux. Сейчас разработка ведётся преимущественно на Windows. В статье собраны проблемы, с которыми автор столкнулся в процессе разработки, а также некоторые вопросы, связанные с офисным и инструментальным программным обеспечением.
При использовании Qt Creator для повышения уровня компонентов пользовательского интерфейса операция выполняется следующим образом. Компиляция проходит успешно как с MSVC, так и с WinGW.
Обычно ошибка выглядит так: "ui_mainui.h:22:10: fatal error: chatinputedit.h: No such file or directory
#include "chatinputedit.h"
^~~~~~~~~~~~~~~~~“
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. Вы можете напрямую скомпилировать её без проблем.
На Mac 13 при использовании Clang64 для компиляции Qt+CMake возникает ошибка: :-1: error: ninja: build stopped: subcommand failed.
[Решение] 1. Возможно, kit не настроен должным образом. 2. CMake не установлен должным образом. 3. В CMakeList.txt есть синтаксическая ошибка, которую необходимо устранить (обычно это так).
xx
Как установить Visual Studio Install для использования английского языка?
[Решение] Добавьте --locale en-US
после запуска программы.
QString преобразуется в char * странным образом, иногда происходит сбой?!
В 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();
Проблемы с компиляцией проекта, вызванные Microsoft SDK.
Win10 20H2 использует VS2019, перетаскивание окон приводит к сбою!
VS2019 отладка Qt5, QString отображается как адрес памяти, а не строка!
Проблема, вызванная Notepad, встроенным в Microsoft. Возврат каретки (CR) и перевод строки (LF).
Отладка Visual Studio с использованием точек останова, стрелки смещаются в неправильную функцию.
Qt Creator (Qt 15.2) компилируется успешно при использовании MinGW, но не компилируется при использовании MSVC 2022!
Файлы .h.cpp в MSVC используют формат UTF8-BOM.
Qt Creator (Qt 15.2), используя MinGW, терминал на китайском языке не искажается, но при использовании MSVC 2022 искажается.
Файлы .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()
Получение аудиовхода и вывода с помощью 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 )