2011-01-06 36 views

答えて

8

QtGui.QFileIconProviderクラスを使用してください。

+6

パフォーマンスに関するヒント。これらのアイコンを頻繁に提供する必要がある場合は、QFileIconProviderのローカルインスタンスを1つ作成します。 QFileIconProviderの構築は重い –

0

Qt5ので、そのためにQMimeDatabaseを使用します。

QMimeDatabase mime_database; 

QIcon icon_for_filename(const QString &filename) 
{ 
    QIcon icon; 
    QList<QMimeType> mime_types = mime_database.mimeTypesForFileName(filename); 
    for (int i=0; i < mime_types.count() && icon.isNull(); i++) 
    icon = QIcon::fromTheme(mime_types[i].iconName()); 

    if (icon.isNull()) 
    return QApplication::style()->standardIcon(QStyle::SP_FileIcon); 
    else 
    return icon; 
} 
0

あなたは特別な要件を持っていない場合は、QMimeDatabaseはあなたの必要性のためのより良い選択です。 @ nitro2005の答えを試してみることをお勧めします。 QFileIconProviderを使ってこの作業を手で行うことはできます。

あなたの手でこの作業をしたいが何らかの理由でQMimeDatabaseを使用できない場合は、Linux/X11の解決策があります。 QFileInfo(const QString &file)を使用して、ファイルの接尾辞/拡張子を取得することができます(QFileInfoコンストラクタに渡されたQStringは存在するパスかどうかを確認する必要はありません)。最後にMIMEタイプを取得してください。最後にQIconを取得できます。 QIcon::fromThemeを使用して完了です。

たとえば、次のコードでは、ファイルの接尾辞が ".bin"かどうかを確認します。システムのテーマから "application-x-executable" MIMEタイプのアイコンを表示します。実際には、それはあなたの自己によってMIMEデータベースを維持するだけです。

QString fileName("example.bin"); 
QFileInfo fi(fileName); 
if (fi.suffix().compare(QString("bin")) == 0) { 
    item->setIcon(QIcon::fromTheme("application-x-executable", 
            provider.icon(QFileIconProvider::File))); 
} 

あなたの「MIMEデータベース」のMIMEタイプ文字列の参照を取得するには、freedesktop icon naming specをチェックアウトしてください。

関連する問題