QFileDialog не показывает папку Fonts - PullRequest
1 голос
/ 16 октября 2019

Я хочу просмотреть папку Fonts в c: \ Windows и получить путь к файлу выбранного шрифта.

Но когда открывается диалоговое окно, оно не показывает папку Font в Windows.

Void SumFont::FontChange()
{
    QString filePath = QFileDialog::getOpenFileName(NULL, tr("Open File"),
        "/home",
        tr("Fonts (*.ttf)"));

    QlineEditSetFont->setText(filePath);
    isChanged = true;
    stdstrLocation = filePath.toStdString();
    this->isChanged = true; 
}

1 Ответ

2 голосов
/ 17 октября 2019

В 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 могут быть некоторые ловушки для обновления кэша шрифтов, которые могут работать некорректно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...