Есть ли способ перехватить ресурсы, когда они загружаются во время выполнения? - PullRequest
0 голосов
/ 11 января 2020

Вопрос

В Qt (в частности, PyQt5) есть способ перехватить скомпилированные ресурсы, когда они извлекаются приложением во время выполнения?

Контекст

I у меня есть несколько изображений SVG в файле ресурсов QR C, скомпилированных в модуль ресурсов .py, некоторые из которых используются стилями Qt в качестве значков или компонентов пользовательского интерфейса, и я sh буду динамически обрабатывать эти SVG по мере их загружаются во время выполнения, так что любая ссылка, скажем, ':/image.svg' получает f(':/image.svg'), где f() - это некоторая функция, которая каким-то образом преобразует изображение, определенное во время выполнения.

Так, например, Правило QSS:

QCheckBox::indicator:unchecked {
    image: url(:/qss_icons/checkbox-unchecked.svg);
}

будет использовать преобразованное изображение f(':/qss_icons/checkbox-unchecked.svg') и вызов QtGui.QPixmap(":/res/close.svg") в файле .ui, загруженном с uic.loadUi загружениями f(':/res/close.svg') вместо.

Попытка решения

Я прочитал документацию по API Qt Resource System, в том виде, в каком она есть, но на первый взгляд кажется, что нет никакого документированного способа подключиться к процессу поиска ресурсов.

Моей первой попыткой было прохождение файловой системы ресурсов в памяти при запуске программы, начиная с root ": /", и замена каждого ресурса SVG его преобразованной версией. Но система ресурсов доступна только для чтения, поэтому от такого подхода пришлось отказаться.

В противном случае я не знаю, как поступить.

...