C++ 应用程序问题的解析图标

C++ 应用程序问题的解析图标,c++,qt,registry,windows-applications,C++,Qt,Registry,Windows Applications,我想从注册表中获取应用程序图标。问题是我只得到默认的应用程序图标。如何获得实际的应用程序图标?谢谢 屏幕截图: QStringList allLocalMachineX86Keys; QString displayIcon; QString iconFile; QIcon programIcon; QStringList displayIconSplitted; QString iconSplittedData; QFileIconProvider fileIconProvider; QStri

我想从注册表中获取应用程序图标。问题是我只得到默认的应用程序图标。如何获得实际的应用程序图标?谢谢

屏幕截图:

QStringList allLocalMachineX86Keys;
QString displayIcon;
QString iconFile;
QIcon programIcon;
QStringList displayIconSplitted;
QString iconSplittedData;
QFileIconProvider fileIconProvider;
QString displayName;

QSettings registryKeyLocalMachineX86("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall", QSettings::NativeFormat);
allLocalMachineX86Keys = registryKeyLocalMachineX86.allKeys();

for (QString key : allLocalMachineX86Keys) {
    if (!key.isEmpty()) {
        if (key.contains("DisplayIcon")) {
            displayIcon = registryKeyLocalMachineX86.value(key).toString();

            if (displayIcon.contains("\"")) {
                displayIconSplitted = displayIcon.split("\"");
                iconSplittedData = displayIconSplitted.value(displayIconSplitted.length() - 2);
                iconFile = iconSplittedData;
            } else if (displayIcon.contains(",")) {
                displayIconSplitted = displayIcon.split(",");
                iconSplittedData = displayIconSplitted.value(displayIconSplitted.length() - 2);
                iconFile = iconSplittedData;
            } else {
                iconFile = displayIcon;
            }

            if (iconFile.contains(".ico")) {
                programIcon = QIcon(iconFile);
            } else {
                QFileInfo fileInfo(iconFile);
                programIcon = fileIconProvider.icon(fileInfo);
            }
        } else {
            programIcon = QtWin::fromHICON(LoadIcon(NULL, IDI_APPLICATION));
        }

        if (key.contains("DisplayName") && registryKeyLocalMachineX86.value(key).toString() != "") {
            displayName = registryKeyLocalMachineX86.value(key).toString();
            emit appData(programIcon, displayName);
        }
    }
}
代码:

QStringList allLocalMachineX86Keys;
QString displayIcon;
QString iconFile;
QIcon programIcon;
QStringList displayIconSplitted;
QString iconSplittedData;
QFileIconProvider fileIconProvider;
QString displayName;

QSettings registryKeyLocalMachineX86("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall", QSettings::NativeFormat);
allLocalMachineX86Keys = registryKeyLocalMachineX86.allKeys();

for (QString key : allLocalMachineX86Keys) {
    if (!key.isEmpty()) {
        if (key.contains("DisplayIcon")) {
            displayIcon = registryKeyLocalMachineX86.value(key).toString();

            if (displayIcon.contains("\"")) {
                displayIconSplitted = displayIcon.split("\"");
                iconSplittedData = displayIconSplitted.value(displayIconSplitted.length() - 2);
                iconFile = iconSplittedData;
            } else if (displayIcon.contains(",")) {
                displayIconSplitted = displayIcon.split(",");
                iconSplittedData = displayIconSplitted.value(displayIconSplitted.length() - 2);
                iconFile = iconSplittedData;
            } else {
                iconFile = displayIcon;
            }

            if (iconFile.contains(".ico")) {
                programIcon = QIcon(iconFile);
            } else {
                QFileInfo fileInfo(iconFile);
                programIcon = fileIconProvider.icon(fileInfo);
            }
        } else {
            programIcon = QtWin::fromHICON(LoadIcon(NULL, IDI_APPLICATION));
        }

        if (key.contains("DisplayName") && registryKeyLocalMachineX86.value(key).toString() != "") {
            displayName = registryKeyLocalMachineX86.value(key).toString();
            emit appData(programIcon, displayName);
        }
    }
}
更新: 当我对这些代码行进行注释时:

// } else {
//     programIcon = QtWin::fromHICON(LoadIcon(NULL, IDI_APPLICATION));
// }
应用程序图标会显示,但有些是空的或不是来自应用程序(下图):

有人知道怎么修吗?提前谢谢