Просмотр сообщений
|
Страниц: 1 2 3 [4] 5 6
|
48
|
Qt / Установка, сборка, отладка, тестирование / Сборка Qt 5.15 для Windows: использование pkg-config в configure.bat
|
: Ноябрь 19, 2020, 11:38
|
Друзья, сходу не получается подцепить pkg-config при передаче параметров в configure.bat скрипт. Нужно что-то вроде этого: CONFIG += link_pkgconfig PKGCONFIG += gstreamer-1.0 Собственно, сейчас требуется собрать GStreamer-1.0 backend for QtMultimedia. Сам GStreamer предоставляет pkg-config файлы, естественно. Fallback-вариант, полагаю: Configure understands variable assignments like VAR=value on the command line. Each uppercased library name (obtainable with -list-libraries) supports the suffixes _INCDIR, _LIBDIR, _PREFIX (INCDIR=PREFIX/include, LIBDIR=PREFIX/lib), _LIBS, and - on Windows and Darwin - _LIBS_DEBUG and _LIBS_RELEASE. E.g., ICU_PREFIX=/opt/icu42 ICU_LIBS="-licui18n -licuuc -licudata". Т.е. нужно будет как-то так: configure ... GSTREAMER=c:\gstreamer_installation_dir ... и так для всех этих модулей: gstreamer gstreamer_app gstreamer_gl gstreamer_photography и при условии, что хедеры и либы лежат там по стандартным путям. А если нет, то придется делать вызовы pkg-config для получения списка хедеров и либ. Вообщем, это не 2 строчки.
|
|
|
49
|
Qt / Установка, сборка, отладка, тестирование / make install: создание ссылки на h-файл из папки исходников вместо самого файла
|
: Ноябрь 18, 2020, 20:18
|
В prebuild Qt5, или когда вы собрали Qt из исходников, при этом сборка происходила в папке рядом, а не в папке исходников (shadow build), и задействовали далее make install (пусть в "C:\Qt\Qt-5.15.1"), то в "C:\Qt\Qt-5.15.1\include" будут находится скопированные из папки исходников заголовочные файлы. Требуется, чтобы вместо самих файлов были ссылки на соответствующие файлы из папки исходников, например: "C:\Qt\Qt-5.15.1\include\QtCore\QBuffer": А вот теперь в свою очередь "qbuffer.h" ссылается но соответствующий файл из папки исходников: #include "..\..\Qt-v5.15.1-src\qtbase\src\corelib\io\qbuffer.h" Полагаю, что такие ссылки генерируются при использовании configure опции -developer-build или при сборке в каталоге исходников (конкретно, Qt 4.8.7 вела себя именно так). Да это создает зависимость от сорцов, но это все требуется на машине девелопера. Такая структура в т.ч. позволяет без лишних усилий переключаться между хедером и сорцом (F4 в QtCreator). В противном случае вам придется задавать пути поиска сорцов, при этом, например, в QtCreator (4.12) там задаются конкретные папки (т.е. нет рекурсивного поиска вглубь), подстановочные символы не поддерживаются. Вам придется задавать десятки папок. Где пропаичить configure для этого?
|
|
|
52
|
Qt / Установка, сборка, отладка, тестирование / Re: Перенос Qt5 в другой каталог
|
: Ноябрь 14, 2020, 23:57
|
Вобщем, слегка проработал тему: 1. Изменить харкордные пути можно через Qt Installer Framework. Maintenance Tool как раз оттуда. Там скриптовые модули для кастомной обработки. 2. Спецом для Windows есть еще тулза windeployqt, она также должна уметь патчить. Я все эти инструменты не использовал, ибо нужно разбираться. 3. Собственно, полагаю достаточным будет пропатчить вручную (всего то ~10 файлов). 4. Пермещение Qt, видимо, все же актуальная задача. И вот здесь https://github.com/lniccoli/qtrelocator уже давно кто-то запилил консольную тулзу, сорцы которой выдранны из Qt-инсталлера. Она как раз только и делает, что патчит: QtRelocator "E:\My New Location\Qt-v5.12.3-win32-x64-msvc2017" qt5 qmake она патчит не до конца. Файлы, которые нужно было пропатчить в моем случае (Qt-v5.12.3-win32-x64-msvc2017): bin: 2020-11-14 23:20 2,794,496 qmake.exe 2020-11-14 23:20 6,130,176 Qt5Core.dll 2020-11-14 23:20 14,041,088 Qt5Cored.dll lib: 2020-11-14 23:20 1,424 Qt5AxBase.prl 2020-11-14 23:20 1,409 Qt5AxBased.prl 2020-11-14 23:20 1,499 Qt5AxContainer.prl 2020-11-14 23:20 1,485 Qt5AxContainerd.prl 2020-11-14 23:20 1,506 Qt5AxServer.prl 2020-11-14 23:20 1,492 Qt5AxServerd.prl 2020-11-14 23:20 1,382 Qt5PacketProtocol.prl 2020-11-14 23:20 1,365 Qt5PacketProtocold.prl 2020-11-14 23:20 1,425 Qt5QmlDebug.prl 2020-11-14 23:20 1,410 Qt5QmlDebugd.prl 2020-11-14 23:20 1,423 Qt5QmlDevTools.prl 2020-11-14 23:20 1,477 Qt5UiTools.prl 2020-11-14 23:20 1,465 Qt5UiToolsd.prl Да, и начиная с Qt 5.14, Qt становится перемещаемой (-relocatable configure option, которая включена по умолчанию), т.е. она ищет плагины относительно QtCore, а не по хардкордным путям. Распространяемые бинари были собраны с этой опцией (кто скажет у кого >=5.14)?
|
|
|
54
|
Qt / Мультимедиа / Бэкэнд QAudioInput/QAudioOutput в Qt5/Windows 7
|
: Ноябрь 13, 2020, 12:44
|
Во времена Qt4 классы QAudioInput/QAudioOutput имплементировались через Waveform Audio API ( https://docs.microsoft.com/en-us/windows/win32/multimedia/waveform-audio-reference). Реализация там была какая-то тяжелая, нелогичная - системные коллбеки для получения звука пробрасывались через поток, в котором живут QAudioInput/QAudioOutput, что побуждало всю работу вести в отдельном высокоприоритетном потоке. Ну да ладно. В Qt5 (5.12) при беглом просмотре я вижу плагинную систему для загрузки бэкэнда (Waveform Audio API, WASAPI, ALSA,..). Собственно, что там выбирается по умолчанию, и как принудительно задать желаемый бэкэнд, например, ALSA? В принципе, тот же вопрос будет и для других платформ.
|
|
|
56
|
Qt / Qt-инструментарий / Re: Автоматическое форматирование кода
|
: Октябрь 31, 2020, 10:11
|
А как для встроенного стиля (точнее, Qt-based и отредактированный с использованием табов, а не пробелов) добиться выравнивания не по открывающей скобке, а просто с регулярным отступом: while (a || b)
нужно:
while (a || b)
Эта настройка находится на вкладке "Alignment" диалога редактирования стиля. Проблема в том, что при выставлении нужного отступа он не сохраняется. QtCreator v4.12, но так было у меня всегда ... и в QtCreator v1.x.x.
|
|
|
57
|
Qt / Qt-инструментарий / QtAssistant (Qt5): убрать из табов информацию модуля
|
: Октябрь 31, 2020, 09:14
|
В QtAssistant использую табы для открытых документов. Например, для QAbstractItemView заголовок таба выглядит так: "QAbstractItemView | Qt Widgets 5.12.3". Как убрать часть, соответствующую модулю (" | Qt Widgets 5.12.3")?
Я понимаю, что один и тот же документ может встречаться в разных модулях, соответственно, информация о модуле должна отображаться, и тем не менее.
|
|
|
58
|
Qt / Общие вопросы / A где QtDemo?
|
: Октябрь 28, 2020, 19:11
|
В Qt4 была прога QtDemo. Есть ли она для Qt5, где? Я не нашел через Maintenance Tool, возможно, просто просмотрел.
|
|
|
59
|
Программирование / Общий / Re: Оптимальное хранение члена класса
|
: Октябрь 27, 2020, 21:41
|
А просто три синглтона без всяких мап, соответственно, для CBasePrimitive, CModelPrimitive, CDetailPrimitive: Polygons* poligonsInstance() { static auto result = new Polygons; return result; }
Polygons* poligonsInstance(const QString& name) { static auto result = new Polygons(name); // или как там они создаются в зависимости от name/details return result; }
Polygons* poligonsInstance(int details) { static auto result = new Polygons(details); return result; } Ну или если они должны быть в области видимости классов, то делать их static protected, соответственно. Эти синглтоны (Мейерса) инициализируются при первом обращении, thread-safe. Если указатель не может принимать нулевого значения по смыслу, то я использую во всех таких случаях ссылку. Т.е.: Polygons& poligonsInstance(int details)
|
|
|
60
|
Программирование / Общий / Re: STL-compatible контейнеры с семантикой Qt's Implicit Sharing
|
: Октябрь 25, 2020, 18:26
|
Да, нужен QVector<char>, такой что первый байт всегда лежит по адресу, кратному 256 (или любому другому, задаваемому статически). Структура байт в векторе - это уже будет двумерный индекс.
Глянул в отладчике, да, "близок локоть да не укусишь". Выравнивание есть, но не видно как подлезть. Ну а если "не по теме" ? Верную ли цель Вы ставите (выровненный QVector<char>) и стоит ли ее добиваться? С точки зрения "минимум переделок" - скорее всего да. Но если все делать чисто/кошерно (к чему Вы так явно стремитесь) - то скорее нет. Ведь операции с QVector<char>, хотя бы push_back, erase и.т.п. никак не поддерживают целостность выравниваемых структур. Нужно, чтобы начало вектора было выровнено, далее программист сам решает, как ему обрабатывать данные в середине. Т.е., он будет читать их кусками по 256 байт, если конкретный обработчик требует выравнивания. С невыровненным началом - неудобно, size()/begin()/operator[],... уже непосредственно неприменимы.
|
|
|
|
|