Qt QFileDialog不显示字体文件夹

Qt QFileDialog不显示字体文件夹,qt,qt5,Qt,Qt5,我想浏览c:\Windows中的字体文件夹,并获取所选字体的文件路径 但当对话框打开时,它不会显示Windows中的字体文件夹 Void SumFont::FontChange() { QString filePath = QFileDialog::getOpenFileName(NULL, tr("Open File"), "/home", tr("Fonts (*.ttf)")); QlineEditSetFont->setText(f

我想浏览c:\Windows中的字体文件夹,并获取所选字体的文件路径

但当对话框打开时,它不会显示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; 
}

在Windows上,字体文件夹除了以其他方式受到系统保护外,还通过以下行在
desktop.ini
中设置了特殊的字体显示模式:
CLSID={BD84B380-8CA2-1069-AB1D-0800948f534}
。这使得
AppID{50d69d24-961d-4828-9d1c-5f4717f226d1}
负责在所有系统浏览器中显示此文件夹。不幸的是,Qt中的Windows本机文件对话框无法将字体文件夹显示为正确的字体查看器(原因我不知道)。不过,我知道有两种方法可以解决这个问题

首先是搞乱了Windows本身——只需将字体文件夹中的
desktop.ini
文件重命名为类似于
desktop.ini.bak
。您需要管理员权限,因此可以从
cmd
或PowerShell“以管理员身份”启动。此外,可能必须关闭UAC。在此之后,“字体”文件夹将成为常规文件夹,
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可能有一些钩子用于更新字体缓存,但这些钩子可能无法以这种方式正常工作。

是否检查了路径?如果Qt无法访问它,该对话框将显示一个默认文件夹。@ymoreau yes对话框将显示defaut文件夹。您希望在您的文件夹中显示“c:\Windows”而不是“/home”code@Deep我可以浏览到C:\Windows,但我看不到字体文件夹。当我尝试像这样的操作时,QString filePath=QFileDialog::getOpenFileName(NULL,tr(“打开文件”),“/home”,tr(“字体()”);