В Windows папка «Шрифты», кроме защиты системой другими способами, имеет специальный режим отображения шрифтов, установленный в desktop.ini
этой строкой: CLSID={BD84B380-8CA2-1069-AB1D-08000948F534}
. Это делает AppID {50d69d24-961d-4828-9d1c-5f4717f226d1}
ответственным за отображение этой папки во всех системных браузерах. К сожалению, диалоговое окно Windows-файлов в Qt не может отображать папку шрифтов как правильную программу просмотра шрифтов (по неизвестным мне причинам). Есть два способа решения этой проблемы, о которых я знаю.
Первый - возиться с самой Windows - просто переименуйте файл desktop.ini
в папке шрифтов в что-то вроде desktop.ini.bak
. Для этого вам потребуются права администратора, так что делайте это с cmd
или PowerShell, запущенным «как администратор». Также UAC, вероятно, должен быть выключен. После этого папка fonts станет обычной папкой, и QFileDialog
сможет отобразить ее как любую другую папку. Это на самом деле не рекомендуется в производственной среде, но я не знаю, зачем вам нужен прямой доступ к папке шрифтов.
Второй метод не использует диалоговое окно с собственным файлом Windows.
QString filePath = QFileDialog::getOpenFileName(NULL, tr("Open File"),
QStandardPaths::standardLocations(QStandardPaths::FontsLocation)[0],
tr("Fonts (*.ttf);;Everything (*.*)"), nullptr,
QFileDialog::DontUseNativeDialog);
Приведенный выше код откроет диалоговое окно отката Qt, которое не заботится о desktop.ini
.
В любом случае, будьте осторожны при прямом доступе к папке шрифтов. Особенно, если вы планируете помещать в него файлы. В Windows могут быть некоторые ловушки для обновления кэша шрифтов, которые могут работать некорректно.