因此,我需要使此函数的结果唯一。

我的任务很简单:我只想显示文本处理应用程序的编码选择对话框。
我的第一个天真解决方案如下所示:

QList<QByteArray> encodings = QTextCodec::availableCodecs ();
QSet<QTextCodec*> unique_codecs;
unique_codecs.insert (QTextCodec::codecForName ("autodetect"));
unique_codecs.insert (QTextCodec::codecForName ("system"));
foreach (QByteArray e, encodings)
{
    if (QTextCodec* c = QTextCodec::codecForName (e))
    {
        if (!unique_codecs.contains (c))
        {
            m_encodings.append (e);    // QStringList to store encodings
            unique_codecs.insert (c);
        }
    }
}

你还有其他建议吗?

最佳答案

availableMibs()方法可返回MIB列表-这是编解码器的唯一ID,不会重复。然后QTextCodec::codecForMib(int)将让您检索有问题的编解码器。

foreach (int mib, QTextCodec::availableMibs()) {
    m_encodings << QTextCodec::codecForMib(mib)->name();
}

在我的机器上,我得到111个可用的mib和804个可用的编解码器名称

关于c++ - QTextCodec::availableCodecs返回编解码器重复项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19608983/

10-11 08:10